【发布时间】:2016-08-25 03:32:06
【问题描述】:
我有这些专栏
Id Status
----------
1 pass
1 fail
2 pass
3 pass
我如何选择所有只有pass 状态但如果Id 至少有一个失败,它也不会被选中。
【问题讨论】:
标签: sql sql-server select count
我有这些专栏
Id Status
----------
1 pass
1 fail
2 pass
3 pass
我如何选择所有只有pass 状态但如果Id 至少有一个失败,它也不会被选中。
【问题讨论】:
标签: sql sql-server select count
如果同一个id可以有多个pass
SELECT id
from table
WHERE status = 'pass'
and id NOT IN (SELECT id FROM table WHERE status = 'fail')
【讨论】:
您需要使用GROUP BY & HAVING 子句
SELECT Id
FROM yourtable
GROUP BY Id
HAVING Sum(case when status ='pass' then 1 else 0 end) = count(status)
HAVING子句可以改成
HAVING Count(case when status ='pass' then 1 end) = count(status)
【讨论】:
我只是讨厌喋喋不休的案例陈述,所以
SELECT Id
FROM table1
GROUP BY Id
HAVING COUNT(DISTINCT [Status]) = 1 AND MIN([Status]) = 'pass'
或
SELECT Id
FROM table1
GROUP BY Id
HAVING COUNT(NULLIF([Status], 'fail')) = 1 AND COUNT(NULLIF([Status], 'pass')) = 0
第二个查询仅在状态有两个值“通过”和“失败”时有效。
【讨论】: