SQL -根据列值进行筛选和分组



我有下面的表格。

Code     Status    
1        Noaudit/One  
1        Audit/One      
1        Audit/Two      
2        Noaudit/One
2        Noaudit/Two
3        Audit/One
3        Audit/Two

期望的输出结果:

Code     Status      
1        Audit/One      
1        Audit/Two
2        Noaudit/One
2        Noaudit/Two
3        Audit/One
3        Audit/Two

基本上,如果代码具有审计状态和Noaudit,则应该只显示审计记录。如果代码只有Noaudit记录,则应该显示所有的Noaudit记录。提前谢谢。

我试着分组,然后应用过滤器,但它没有工作。

尝试如下:

select Code, Status
from
(
select *, 
count(case when Status like 'Audit%' then 1 end) over (partition by Code) as Audit
from table_name
) T
where Status like 'Audit%' or Audit=0

查看演示

你可以这样做:

select t.*
from t
join (
select code, sum(case when t.status like 'A%' then 1 else 0 end) as a
from t 
group by code
) x on x.code = t.code
where x.a > 0 and t.status like 'A%'
or x.a = 0 and t.status like 'N%'

注意: OP没有明确定义只审核的情况,但是包含的结果意味着应该包含它们。

最新更新