需要在 SQL 服务器中转换字符串值
Need to Pivot String values in SQL server
我有 table 个值,描述为:
Occupation String
Name String
Developer
A
Developer
B
Designer
X
Coder
Y
Coder
Z
我需要数据透视格式的值:
Designer
Developer
Coder
X
A
Y
Null
B
Z
有人可以帮忙吗?
提前致谢
带有 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
输出:
Developer Designer Coder
A X Y
B NULL Z
如果 Occupation
的数量可能会有所不同,那么您需要动态 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
注意: 我使用 ORDER BY (SELECT NULL)
只是为了随机排序。最好为此目的使用一些实际字段。
我有 table 个值,描述为:
Occupation String | Name String |
---|---|
Developer | A |
Developer | B |
Designer | X |
Coder | Y |
Coder | Z |
我需要数据透视格式的值:
Designer | Developer | Coder |
---|---|---|
X | A | Y |
Null | B | Z |
有人可以帮忙吗?
提前致谢
带有 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
输出:
Developer Designer Coder
A X Y
B NULL Z
如果 Occupation
的数量可能会有所不同,那么您需要动态 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
注意: 我使用 ORDER BY (SELECT NULL)
只是为了随机排序。最好为此目的使用一些实际字段。