SQL Server 2008 SP4
我正在尝试检查数据并确定具有共同安全角色集合的所有用户。对于匹配,他们具有相同的安全角色集合。示例数据
表 User_Roles :
UserID RoleID
------ ------
User1 Role1
User1 Role2
User1 Role3
User2 Role1
User3 Role3
User4 Role1
User4 Role2
User4 Role3
User5 Role1
User6 Role3
User7 Role1
结果集应返回具有相同分组集合的结果
User1, User4 -- users with ROLE1,2&3
User2, User5, User7 -- users with ROLE1 ONLY
User3, User6 -- users with ROLE3 ONLY
答案 0 :(得分:0)
使用STUFF
步骤1:通过STUFFing角色对每个用户的角色(按顺序)进行分组 第2步:每个分组角色的STUFF用户
reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )
答案 1 :(得分:0)
您可以使用基于集合的操作执行此操作:
with ur as (
select ur.*, count(*) over (partition by userid) as cnt
from user_roles ur
)
select ur1.userid, ur2.userid
from ur ur1 join
ur ur2
on ur1.roleid = ur2.roleid and
ur1.cnt = ur2.cnt and
ur1.userid < ur2.userid
group by ur1.userid, ur2.userid, ur1.cnt
having count(*) = ur1.cnt;
这将检查两个用户之间的所有角色是否匹配,以及他们具有相同数量的角色。