【发布时间】:2020-07-22 15:59:54
【问题描述】:
我正在尝试查询名为 DeviceGroups 的表,该表包含 2 列 MachineID 和 GroupID。这是一个例子
MachineID GroupID
------------------
1 A1
1 A3
2 A2
3 A2
3 A3
4 A4
4 A5
5 A3
我需要显示包含 GroupID A1 或 A2 的所有 MachineID,如果该 MachineID 还包含 A3,则使用单独的列给出是/否。这是预期的结果:
MachineID GroupID ContainsA3?
------------------------------
1 A1 Yes
2 A2 No
3 A2 Yes
注意 MachineID 4 和 5 未列出,因为它们不包含 A1 或 A2,即使 MachineID 5 包含 A3。我无法创建 WHERE 子句来仅过滤 A1 和 A2,因为所有结果都将显示 ContainsA3?为假,如果我包含 A3,则 MachineID 5 将出现,GroupID 为 NULL,这也是不允许的。有任何想法吗?这是我卡住的地方:
SELECT MachineID,
CASE WHEN GroupID = 3 then "Yes" Else "No" END AS [ContainsA3?]
FROM DeviceGroups
结果如下:
MachineID ContainsA3?
-----------------
1 No
1 Yes
2 No
3 No
3 Yes
4 No
4 No
5 Yes
如果我添加 WHERE 子句:
SELECT MachineID,
CASE WHEN GroupID = 3 then "Yes" Else "No" END AS [ContainsA3?]
FROM DeviceGroups
WHERE GroupID = 3
MachineID ContainsA3?
-----------------
1 Yes
3 Yes
5 Yes
【问题讨论】:
-
如果一台机器属于 A1 和 A2组怎么办?
标签: sql sql-server tsql sql-server-2008 group-by