需要在 SQL Server 中透视字符串值

Ash*_*pta 6 sql t-sql sql-server pivot

我有值表,描述为:

职业字符串 名称字符串
开发商 一种
开发商
设计师 X
编码器
编码器 Z

我需要数据透视格式的值:

设计师 开发商 编码器
X 一种
空值 Z

任何人都可以帮忙吗?

提前致谢

gof*_*fr1 5

带有 ROW_NUMBER() 的基本 PIVOT 将为您做一些事情:

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
Run Code Online (Sandbox Code Playgroud)

输出:

Developer   Designer    Coder
A           X           Y
B           NULL        Z
Run Code Online (Sandbox Code Playgroud)

如果Occupations的数量可能会有所不同,那么您需要动态 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
Run Code Online (Sandbox Code Playgroud)

注意:我曾经ORDER BY (SELECT NULL)只是为了获得一些随机排序。为此,最好使用一些实际字段。