按列分组没有特定值

时间:2014-09-26 13:35:13

标签: sql sql-server select sql-server-2012

我正在尝试获取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

2 个答案:

答案 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;
相关问题