在排除其他人时选择某些组

时间:2014-06-16 22:17:29

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

我制作了一个类似于我需要的小数据集。它具有以下内容:

ID  Color
2   blue
2   red
3   blue
3   yellow
4   white
4   green
4   blue
5   green
5   purple
5   black

我想选择已分组的ID,但不包括那些包含' white'或者'黑色'换句话说,应该显示ID 2和3。但是4和5不应该显示,因为他们有白色'和/或'黑色'在他们的颜色列中。

4 个答案:

答案 0 :(得分:2)

总结这些禁止值在您的群组中出现的次数。仅选择此总和为零的那些

select id
from your_table
group by id
having sum(case when color in ('white','black') then 1 else 0 end) = 0

答案 1 :(得分:2)

SELECT *
FROM colortable
WHERE ID NOT IN (
    SELECT ID
    FROM colortable
    WHERE Color IN ('white', 'black')  
    )

答案 2 :(得分:0)

你可以试试这个:

SELECT     DISTINCT ID
FROM       TABLE
WHERE      Color NOT IN ('white', 'black')

希望这有帮助!!!

答案 3 :(得分:0)

SELECT t.ID
FROM @TABLE t
WHERE NOT EXISTS (
                  SELECT 1 
                  FROM @TABLE
                  WHERE t.ID = ID 
                   AND (color = 'white' or color = 'Black') 
                  )
GROUP BY t.ID

WORKING SQL FIDDLE