我正在弄清楚是否可以列出用户需要具有的所有 4 个角色,并为每个角色声明"is"或“否”。例如。
SELECT DISTINCT Grantee, GranteeKind, RoleName, WhenGranted,
CASE
WHEN RoleName='Manager' THEN 'Yes'
WHEN RoleName='Assistant' THEN 'Yes'
WHEN RoleName='Executive' THEN 'Yes'
WHEN RoleName='Deputy' THEN 'Yes'
ELSE NULL
END AS "Already granted?"
FROM DBC.RolesM
WHERE Grantee='UserName'
AND RoleName IN
('Manager',
'Assistant',
'Executive',
'Deputy');
我的查询获取了以下结果,它是 100% 正确的。
Grantee GranteeKind RoleName WhenGranted Already Granted?
UserName User Manager 2018-01-30 Yes
UserName User Assistant 2016-01-30 Yes
不过,我想知道是否有可能得到这样的东西,以便我们对未分配的角色有明确的答案。
Grantee GranteeKind RoleName WhenGranted Already Granted?
UserName User Manager 2018-01-30 Yes
UserName User Assistant 2016-01-30 Yes
UserName User Executive 2016-01-30 No
UserName User Deputy 2016-01-30 No
最佳答案
使用交叉连接
生成行,然后使用左连接
引入值。
不幸的是,Teradata 使得生成角色列表有点困难,但这应该可行:
select g.Grantee, g.GranteeKind, r.RoleName,
rm.WhenGranted,
(case when rm.RoleName is not null then 'Yes' else 'No' end) as already_granted
from (select distinct grantee, GranteeKind
from DBC.RolesM
) g cross join
(select distinct RoleName
from DBC.RolesM
where RoleName in ('Manager', 'Assistant', 'Executive', 'Deputy')
) r left join
DBC.RolesM rm
on rm.grantee = g.grantee and rm.rolename = r.rolename
关于sql - 是否可以从一个表中使用 CASE 语句列出所有可能的用户角色? [寺数据],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56110180/