在列(行至列)中显示每个用户的现有角色

时间:2018-06-26 05:03:52

标签: sql sql-server join

有人可以帮我在下面显示输出吗?我不能使用标准联接,因为如果其中一个角色在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

1 个答案:

答案 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