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
试图用我的小脑袋思考如何编写这个查询,但我不知所措:
当前:
我希望它看起来如何:
如果有人能指出一个可以帮助我解决这个问题的函数,我将不胜感激。我已经尝试使用:
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