从一个表基于两列获取数据

时间:2019-12-13 07:01:40

标签: sql sql-server group-by

我有这样的桌子

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,请指导我?

1 个答案:

答案 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的查询输出中。