代码之家  ›  专栏  ›  技术社区  ›  Harambe Attack Helicopter

将每个用户的现有角色显示到列(行到列)

  •  0
  • Harambe Attack Helicopter  · 技术社区  · 6 年前

    有人能帮助我如何显示下面的输出吗?如果UserRoles中不存在一个角色,则不能使用标准连接,因为行将不包含。只需添加,将不会有新的角色,只有管理员,验证人和批准人将被选中。蒂亚!

    角色表

     ID | Role     
     1 | Admin     
     2 | Verifier     
     3 | Approver
    

    用户角色表

     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 回复  |  直到 6 年前
        1
  •  1
  •   Chanukya Gordon Linoff    6 年前
    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