SQL Join 中的行数据到列数据

SQL Row Data to Column Data in Join

试图用我的小脑袋思考如何编写这个查询,但我不知所措:

当前:

我希望它看起来如何:

如果有人能指出一个可以帮助我解决这个问题的函数,我将不胜感激。我已经尝试使用:

max(case when ....)pivot()

我在其他文章中找到的,但无法让它们与我的 JOIN 一起工作:

SELECT GROUP_ID, ROLE_ID, USER_ID, First_Name, Last_name, Phone
FROM GroupRoles
FULL JOIN Account
ON Account.Account_ID = GroupRoles.User_ID

如果能至少让我指出正确的方向,我们将不胜感激...

这应该可以做到。如果你需要灵活的角色数量,那就更复杂了。您需要在字符串中创建 sql 并使用 exec sp_executesql 来执行它

select * from
(
    select GROUP_ID, 'ROLE_' + convert(varchar, ROLE_ID) + '_' + Keys as Keys, Vals from
    (
        SELECT GROUP_ID, ROLE_ID, USER_ID, convert(varchar, First_Name) as First_Name, convert(varchar, Last_name) as Last_name, convert(varchar, Phone) as Phone
        FROM GroupRoles
        FULL JOIN Account
        ON Account.Account_ID = GroupRoles.User_ID
    ) t
    UNPIVOT  
    (
        Vals FOR Keys IN   
        (First_Name, Last_name, Phone)  
    ) AS unpvt
) AS SourceTable  
PIVOT  
(  
  MAX(Vals)  
  FOR Keys IN (
        ROLE_1_First_Name,
        ROLE_1_Last_name,
        ROLE_1_Phone,
        ROLE_2_First_Name,
        ROLE_2_Last_name,
        ROLE_2_Phone,
        ROLE_3_First_Name,
        ROLE_3_Last_name,
        ROLE_3_Phone,
        ROLE_4_First_Name,
        ROLE_4_Last_name,
        ROLE_4_Phone,
        ROLE_5_First_Name,
        ROLE_5_Last_name,
        ROLE_5_Phone
    )  
) AS PivotTable