将一列数据旋转到行,同时保持其他列不变

时间:2013-03-25 18:05:04

标签: sql-server sql-server-2005 pivot

我正在从SQL Server 2005数据库中检索几条记录:

enter image description here

我想透过数据来显示结果如下:

enter image description here

日期和流程可以无限制,所以我想使用动态支点。我尝试了一些解决方案但无法使其正常工作。

1 个答案:

答案 0 :(得分:1)

嗯,首先,你不能在表中拥有无限数量的列,所以我假设你有更少的1023个进程。无论如何,你需要使用动态支点:

DECLARE @Processes AS NVARCHAR(MAX), @Query  AS NVARCHAR(MAX);

SELECT @Processes = STUFF(( SELECT DISTINCT ',' + QUOTENAME(Process) 
                            FROM YourTable
                            WHERE Process IS NOT NULL
                            FOR XML PATH(''), 
                            TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @Query = '
SELECT *
FROM YourTable T
PIVOT(SUM([Percent]) FOR Process IN ('+@Processes+')) AS PT'

EXEC(@Query)

Here is a sqlfiddle现场演示。