行到列转置为字符串

时间:2015-01-02 08:42:18

标签: sql sql-server

以下是示例数据:

╔═══════╦════════════════╦══════════════════╗
║ Login ║   User_type    ║ Type_login_value ║
╠═══════╬════════════════╬══════════════════╣
║ x     ║ assignee_ids   ║ a                ║
║ x     ║ subscriber_ids ║ b                ║
║ x     ║ subscriber_ids ║ c                ║
║ x     ║ subscriber_ids ║ d                ║
║ x     ║ subscriber_ids ║ e                ║
║ x     ║ subscriber_ids ║ f                ║
║ y     ║ assignee_ids   ║ g                ║
║ y     ║ subscriber_ids ║ h                ║
║ y     ║ subscriber_ids ║ i                ║
║ y     ║ subscriber_ids ║ j                ║
╚═══════╩════════════════╩══════════════════╝

输出应该像

Login  assignee_ids  subscriber_ids
x      a             b,c,d,e,f
y      g             c,h,I,j

还会有其他一些列用于分组。请建议解决此问题的最佳方法。

1 个答案:

答案 0 :(得分:1)

试试这个,

SELECT * FROM (SELECT  DISTINCT LOGIN,
       USER_TYPE,
       Stuff((SELECT ',' + TYPE_LOGIN_VALUE
              FROM   #TEMP A
              WHERE  A.LOGIN = B.LOGIN
                 AND A.USER_TYPE = B.USER_TYPE
              FOR XML PATH('')), 1, 1, '') AS COL1
FROM   #TEMP B ) AB
PIVOT (MAX(COL1) FOR USER_TYPE IN ([assignee_ids],[subscriber_ids])) PV