Need to Pivot String values in SQL server

老子叫甜甜 提交于 2020-08-07 05:26:37

问题


I have table described as:

Occupation String |
Name String

With values:

Developer | A
Developer | B
Designer  | X
Coder     | Y
Coder     | Z

I need values in pivot format as:

Designer | Developer | Coder
---------+-----------+--------   
   X     |     A     |   Y
   Null  |     B     |   Z

Can anyone help on this ?

Thanks in advance


回答1:


The basic PIVOT with ROW_NUMBER() will do things for you:

SELECT  [Developer],
        [Designer],
        [Coder]
FROM (
    SELECT  *,
            ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY (SELECT NULL)) RN
    FROM #temp
) as t
PIVOT (
    MAX(Name) FOR Occupation IN ([Developer],[Designer],[Coder])
) as pvt

Output:

Developer   Designer    Coder
A           X           Y
B           NULL        Z

If the number of Occupations may very then you need dynamic SQL:

DECLARE @columns nvarchar(max),
        @sql nvarchar(max)

SELECT @columns = (
    SELECT DISTINCT ','+QUOTENAME(Occupation)
    FROM #temp
    FOR XML PATH('')
)

SELECT @sql = N'
SELECT  '+STUFF(@columns,1,1,'')+'
FROM (
    SELECT  *,
            ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY (SELECT NULL)) RN
    FROM #temp
) as t
PIVOT (
    MAX(Name) FOR Occupation IN ('+STUFF(@columns,1,1,'')+')
) as pvt'

EXEC sp_executesql @sql

Note: I have used ORDER BY (SELECT NULL) just to get some random ordering. Better use some actual field for this purpose.



来源:https://stackoverflow.com/questions/39505190/need-to-pivot-string-values-in-sql-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!