【发布时间】:2014-09-18 09:53:02
【问题描述】:
我在做这项工作时遇到了问题:
我有这张桌子(物品):
ItemId Name
1 Test
2 Foo
3 Bar
4 Etc
5 Some
每个项目都有几个链接到它的命令,在一个表 CommandItem 中:
CommandId ItemId
912 2
916 2
922 2
954 2
976 3
977 3
979 3
982 3
998 4
1001 4
1020 4
1035 4
1039 5
1041 5
我只想获得几种commandId,它们与存储在表中的“函数”命令相匹配:
CommandId FunctionId
912 81
916 72
922 56
954 13
976 81
977 72
979 56
982 13
998 81
1001 72
1020 56
1035 13
1039 81
1041 72
我只想要 FunctionId 为 81、72 或 56 的 commandId。
假设他们的名字是:
81:黄色
72:棕色
56:黑色
编辑:在某些情况下,itemId 可能不存在某些命令。
例如,我们可以说 itemId 5 有一个黄色和棕色的命令,但没有黑色的命令。
在这种情况下,我仍然需要 itemId 5 出现在表中,黑色为“NULL”。
我想要的最终视图有这种形式:
ItemId Name Yellow Brown Black
1 Test NULL NULL NULL
2 Foo 912 916 922
3 Bar 976 977 979
4 Etc 998 1001 1020
5 Some 1039 1041 NULL
我试着做这个:
select
i.itemid,
i.name,
c1.CommandId as brown,
c2.CommandId as yellow,
c3.CommandId as black
from item i
inner join commanditem ci
on i.itemid = ci.itemid
inner join command c1
on ci.CommandId = c1.CommandId and c1.FonctionId = 81
left outer join command c2
on ci.CommandId = c2.CommandId and c2.FonctionId = 72
left outer join command c3
on ci.CommandId = c3.commandId and c3.FonctionId = 56
我也尝试过使用内部连接,使用枢轴......但没有成功。
我希望我足够清楚,感谢您给我的任何帮助。
【问题讨论】:
标签: sql join sql-server-2008-r2 sql-server-2012