Ash*_*pta 6 sql t-sql sql-server pivot
我有值表,描述为:
| 职业字符串 | 名称字符串 |
|---|---|
| 开发商 | 一种 |
| 开发商 | 乙 |
| 设计师 | X |
| 编码器 | 是 |
| 编码器 | Z |
我需要数据透视格式的值:
| 设计师 | 开发商 | 编码器 |
|---|---|---|
| X | 一种 | 是 |
| 空值 | 乙 | 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
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)只是为了获得一些随机排序。为此,最好使用一些实际字段。
| 归档时间: |
|
| 查看次数: |
4988 次 |
| 最近记录: |