需求
现在有一数据表,默认设有四列:
分别为id用户编号,unit单位名称,status角色状态(0为拥有权限,1为取消了权限),data为角色名称
需要获取所有员工的所有角色权限,
此外,如果一个员工所有角色权限都被取消了(拥有的所有角色状态都为1),那就统计出曾经拥有的所有权限
例如上图,用户编号为3的员工,现在在u1部门,曾经角色为Assitant,但是被取消了,现在只有HR和Servant角色权限
查询sql
select ID,UNIT,STATUS,ROLE
from (select id,unit,status,
listagg(data,'、') within group (order by id,unit,status) over(partition by id,unit,status) as role,
row_number() over(partition by id,unit order by id,unit,status) as rn
from mygroup
)
where rn = 1
执行后可以看到,id为3的用户,只查询到了状态为0的角色信息;
而id为4的用户由于全部权限都被取消,所以展示了所有被取消的权限集合