【发布时间】:2022-11-10 01:57:27
【问题描述】:
我有两个表,其中包含我需要使用的以下字段:
-
主数据:Master_ID (PK)
-
物品数据:Crate_ID、Master_ID (FK)、Item_Type_ID、Item_Type_Description、Item_Date
Item_Type_ID 有几个不同的数值,即 10、20、30、40、50 ... 100 ... 等。 每个数值代表一种类型,即蔬菜、水果、谷物、肉类等。
Item_Type_Description 是这样的:水果、蔬菜、谷物、肉类等。
Item_Date 是一个单一的日期,用于标识该特定项目(基于 Item_ID)何时添加到 Crate。
请注意,每个 Master_ID 只能有一个唯一的 Item_Type_ID。意思是,Item_Type_ID '10' 只能与 Master_ID '1234' 关联一次。一个 Item_Type_ID 可以与许多不同的 Master_ID 相关联,但每个 Master_ID 只能关联一次。
我遇到的问题是我可以获得组合结果,但是对于每个 Item_Type_ID,正在创建一个不同的记录/行。
这是我到目前为止生成的代码,它给了我不正确的结果:
USE Shipping
GO
BEGIN
SELECT
vmi.master_id
,CASE
WHEN vid.item_type_id = 10 THEN vid_item_date
ELSE NULL
END as 'Fruit_Item_Date'
,CASE
WHEN vid.item_type_id = 20 THEN vid_item_date
ELSE NULL
END as 'Veggie_Item_Date'
,CASE
WHEN vid.item_type_id = 30 THEN vid_item_date
ELSE NULL
END as 'Grains_Item_Date'
,CASE
WHEN vid.item_type_id = 40 THEN vid_item_date
ELSE NULL
END as 'Meat_Item_Date'
FROM v_master_data vmi
LEFT JOIN v_item_data vid ON vmi.master_id = vid.master_id
WHERE vid.item_type_id IN (10,20,30,40)
END
GO
非常感谢任何输入、指示、帮助、方向、建议。
运行 SQL Server 2016,通过 SQL Server Management Studio v18 访问。
【问题讨论】:
-
作为文本的示例数据和所需结果比图像更有帮助。也没有v18。选择@@version 将告诉您正在运行的版本。
-
乍一看,您似乎正在寻找 PIVOT 甚至条件聚合
-
@JohnCappelletti,我很抱歉,MS SQL Server 2016,在 MS SQL Server Management Studio v18 上运行。将编辑我的帖子以添加文本示例而不是图像。
-
Please do not upload images of code/data/errors when asking a question. 另外,有问题要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源(指出我阅读一些材料的方向) 根据help center 准则是题外话。
-
@KenWhite 我很欣赏解释的链接。有趣的是,当我第一次阅读您的回复时,我最初的想法是:如果我们不应该上传图片,那么为什么要选择它呢?阅读帖子后,很明显OP的最初想法与我的一致,但提供的答案非常明确。再次感谢你。至于寻求建议,我只是建议,如果没有人能够/想要帮助为我所面临的问题提供答案,那么向我指出一些有见地的指导仍然会有所帮助。欣赏你的洞察力。 :)
标签: sql sql-server tsql