我有下面的表格。
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没有明确定义只审核的情况,但是包含的结果意味着应该包含它们。