【Oracle】查询表总某列是否全部满足条件*例子详解

01.初始表与问题

X区域,共有A,B,C3种上岗证,如果一个人有这3张上岗证,就判断为AB全能
L区域,共有C,D2种上岗证,如果一个人有这2张上岗证,就判断为CD全能

--全能上岗证
select type,post,Almighty from
(select 'X区域'type,'A证'post,'AB全能'Almighty from dual union all
select 'X区域'type,'B证'post,'AB全能'Almighty from dual union all
select 'X区域'type,'C证'post,'AB全能'Almighty from dual union all
select 'L区域'type,'C证'post,'CD全能'Almighty from dual union all
select 'L区域'type,'D证'post,'CD全能'Almighty from dual)AL_post

在这里插入图片描述

工号为01的员工,在X区域有3张上岗证,在L区域有一张上岗证
工号为02的员工,在X区域有1张上岗证

--工号对应的上岗证
select userid,type,post from
(select '01'userid,'X区域'type,'A证'post from dual union all
select '01'userid,'X区域'type,'B证'post from dual union all
select '01'userid,'X区域'type,'C证'post from dual union all
select '01'userid,'L区域'type,'C证'post from dual union all
select '02'userid,'X区域'type,'A证'post from dual)postData

在这里插入图片描述

问题:
如果将AL_post表和postData表相连,得出该岗位全能的员工共有几个?
注:如果缺少1张上岗证,就不算岗位全能

02.整合数据

我们先将AL_post 表整合数据,这样我们就知道AB全能有哪些上岗证,CD全能有哪些上岗证

--全能上岗证2
select type,almighy,'%'||listagg(post, '%') within group(order by post)||'%'post  
from AL_post group by type,almighy

在这里插入图片描述

然后再将数据表postData整合,这样我们就知道,某个区域里,该工号下具体有那些上岗证了
注:在使用listagg函数时,必须要进行排序

--工号对应的上岗证2
select type,userid,listagg(post, ',') within group(order by post)post  
from postData group by type,userid

在这里插入图片描述

03.结合

最终我们得出,X区域,AB全能的人数为1,其余员工都不符合条件

--整合
--整合
select t1.type,Almighty,count(userid)num from
(select type,userid,listagg(post, ',') within group(order by post)post  
from postData  group by type,userid)t1,
(select type,Almighty,'%'||listagg(post, '%') within group(order by post)||'%'post  
from AL_post group by type,Almighty)t2
where t1.type=t2.type(+) and t1.post like t2.post group by t1.type,Almighty

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值