我有这样的桌子
ID|Incident_ID|Emp_No|Status |
__|___________|______|_________|
1 | 1 |1001 |Approved |
2 | 1 |1002 |Approved |
3 | 2 |1003 |Approved |
4 | 2 |1004 |Pending |
5 | 3 |1005 |Pending |
6 | 3 |1006 |Pending |
现在,我要在Incident_ID和基于Status列的基础上输出,如果对任何特定的event_ID都批准了所有状态,那么应该在此处可见1,因为三个状态都已对事故ID = 1批准,所以应该在三个event_ID中可见
我的查询:
select Incident_ID, Status from tbl_Investigation_Review where Status = 'Approved' group by Incident_ID, Status
但是它同时显示了identity_ID,请指导我?
答案 0 :(得分:1)
由于要对数据组进行明智的过滤,因此必须使用having
而不是where
,并使用sum()
之类的聚合函数来查看所有列是否适用于您的条件。
select Incident_ID
from tbl_Investigation_Review
group by Incident_ID
having sum(case when Status <> 'Approved' then 1 else 0 end) = 0
having
子句检查事件是否没有其他status
。
您只希望发生approved
个事件,而不必将其添加到select
的查询输出中。