Oracle SQL查询逻辑

wydwbb8l  于 2023-04-20  发布在  Oracle
关注(0)|答案(2)|浏览(161)

我有如下的表结构/数据,

Emp_Id  flag
101     Y
102     N
103     Y
103     N

员工标志可能低于3个组合,
1.只有他有“Y”(例如,101)
1.只有他有“N”(例如,102)
1.他有“Y”和“N”(例如,103)
我需要下面的结果,

Emp_Id   Status
----------------
101      Auto
102      Manual
103      Partial
xxslljrj

xxslljrj1#

case子句可以如下使用:
这个想法是看标志count(1)的总数是否等于YESNO标志的数量。

select Emp_Id,
       case 
       when sum(CASE WHEN flag='Y' THEN 1 END) = count(1) then 'Auto' 
       when sum(CASE WHEN flag='N' THEN 1 END) = count(1) then 'Manual'
       else 'Partial' 
       end as Status
from   mytable
group by Emp_Id

Demo here

pftdvrlh

pftdvrlh2#

您可以使用大小写超过标志的平均值转换为0/1值:

Select Emp_Id,
  case avg(case when flag = 'Y' then 1 else 0 end)
  when 0 then 'manual'
  when 1 then 'auto'
  else 'partial' end Status
from mytable
group by Emp_Id

演示here

相关问题