有人可以帮我在下面显示输出吗?我不能使用标准联接,因为如果其中一个角色在UserRoles中不存在,则不会包含该行。只需添加,就不会有新角色,只会检查Admin,Verifier和Approver。 TIA!
角色表
ID | Role
1 | Admin
2 | Verifier
3 | Approver
UserRoles表
UserID | RoleID
1 | 1
1 | 2
2 | 3
3 | 2
3 | 3
预期产量
UserID | Admin | Verifier | Approver
1 | Yes | Yes | No
2 | No | No | Yes
3 | No | Yes | Yes
答案 0 :(得分:1)
CREATE TABLE #Table1
([ID] int, [Role] varchar(8))
;
INSERT INTO #Table1
([ID], [Role])
VALUES
(1, 'Admin'),
(2, 'Verifier'),
(3, 'Approver')
;
CREATE TABLE #Table2
([UserID] int, [RoleID] int)
;
INSERT INTO #Table2
([UserID], [RoleID])
VALUES
(1, 1),
(1, 2),
(2, 3),
(3, 2),
(3, 3)
SELECT UserID
,max(CASE
WHEN ROLE = 'Admin'
THEN 'YES'
ELSE 'NO'
END) Admin
,max(CASE
WHEN ROLE = 'Verifier'
THEN 'YES'
ELSE 'NO'
END) Verifier
,max(CASE
WHEN ROLE = 'Approver'
THEN 'YES'
ELSE 'NO'
END) Approver
FROM #Table1 a
JOIN #Table2 B ON a.ID = b.RoleID
GROUP BY UserID
输出
UserID | Admin | Verifier | Approver
1 | Yes | Yes | No
2 | No | No | Yes
3 | No | Yes | Yes