我有一个如下表。
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
答案 0 :(得分:1)
您可以在下面尝试-
select Site ,VSID1 , VSID2 , Status
group by Site ,VSID1 , VSID2 , Status
having sum(case when status='Rejected' then 0 else 1 end)=0
OR Correlatd子查询
select * from tablename a where not exists (select 1 from tablename b where a.Site
=b.site and a.VSID1=b.VSID1 and a.VSID2=b.VSID2 where status<>'Rejected')
答案 1 :(得分:1)
最大和最小:
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
答案 2 :(得分:0)
SELECT site, VSID1, VSID2, max(Status)
FROM tbl
GROUP BY site, VSID1, VSID2
HAVING COUNT(DISTINCT Status) = 1
max(Status)
可能看起来不太好,但是如果需要在输出中添加Status
,它将为您解决问题。