首页 > 解决方案 > 按Having子句分组并检查值是否相同

问题描述

我有一张如下表。

Site  |   VSID1 |  VSID2 | Status
C1    |    0.1  |  1     |  Rejected
C1    |    0.1  |  1     |  Agreed
C1    |    0.2  |  2     |  Rejected
C1    |    0.2  |  2     |  Rejected

我想在查询中获得结果,并希望所有唯一且具有相同状态的记录,例如按(站点,VSID1,VSID2)分组并选择记录,检查所有行状态是否为“拒绝”

答案应该是第二组记录。不应选择第一组记录,因为它已拒绝并同意。另一方面,应该选择第二组,因为两者都被拒绝。

任何帮助,非常感谢。

我尝试使用 (instr(status, 'Rejected') > 1

标签: sqloraclehive

解决方案


带最大值和最小值:

select Site, VSID1, VSID2, min(Status) Status
from tablename 
group by Site ,VSID1 , VSID2
having min(Status)='Rejected' and max(Status)='Rejected'

如果您想要表中的所有行:

select t.* from tablename t inner join (
    select Site, VSID1, VSID2
    from tablename 
    group by Site ,VSID1 , VSID2
    having min(Status)='Rejected' and max(Status)='Rejected'
) tt
inner join tt.Site = t.Site and tt.VSID1 = t.VSID1  and tt.VSID2 = t.VSID2

推荐阅读