我正在尝试获取Case_Id的列表,其中案例不包含使用Microsoft Sql Server 2012的特定RoleId。
例如,我想获得一个不包含RoleId为4的Case_Id集合。
因此,从下面的数据集中,查询将排除Case_Id的49,50和53.
Id RoleId Person_Id Case_Id
--------------------------------------
108 4 108 49
109 1 109 49
110 4 110 50
111 1 111 50
112 1 112 51
113 2 113 52
114 1 114 52
115 7 115 53
116 4 116 53
117 3 117 53
到目前为止,我已尝试过以下
SELECT Case_Id
FROM [dbo].[caseRole] cr
WHERE cr.RoleId!=4
GROUP BY Case_Id ORDER BY Case_Id
答案 0 :(得分:12)
not exists
运算符似乎完全符合您的需求:
SELECT DISTINCT Case_Id
FROM [dbo].[caseRole] cr
WHERE NOT EXISTS (SELECT *
FROM [dbo].[caseRole] cr_inner
WHERE cr_inner.Case_Id = cr.case_id
AND cr_inner.RoleId = 4);
答案 1 :(得分:8)
只需添加having
子句代替where
:
SELECT Case_Id
FROM [dbo].[caseRole] cr
GROUP BY Case_Id
HAVING SUM(case when cr.RoleId = 4 then 1 else 0 end) = 0
ORDER BY Case_Id;