【发布时间】:2019-05-08 21:00:32
【问题描述】:
我有一个名为 #rdata 的临时表,如下所示:
Months KPI_1 KP1_2 KPI_3
-------------------------------------------
Jan-18 x x x
Feb-18 x x x
Mar-18 x x x
Apr-18 x x x
Aug-18 x x x
我想改成这张表:
KPIs Jan-18 Feb-18 Mar-18 ....
-------------------------------------------
KPI_1 x x x
KPI_2 x x x
KPI_3 x x x
我已经走到这一步了:
----Creating a list of Months
SELECT @Columns = COALESCE(@Columns + ', ','') + QUOTENAME(Months)
FROM
(SELECT DISTINCT Months
FROM #rdata ) AS B
SET @SQL = 'SELECT ' + @Columns + ' KPI_1, KPI_2,KPI_3 FROM #rdata
) as PivotData
PIVOT
(
FOR Months IN (' + @Columns + ')
) AS PivotResult'
EXEC(@SQL)
它似乎不起作用,知道我错过了什么吗?
【问题讨论】:
-
您收到错误消息吗?打印出来的 SQL 是什么样子的?
-
...在数据库中进行透视也是一个好主意。透视通常用于表示目的,并且在表示层中处理得更好。我个人不会为此使用 PIVOT。相反,我会使用交叉连接来获取行上的 KPI,并使用 CASE WHEN / GROUP BY 来转向列
-
@Nick.McDermaid..仅供参考
The syntax for PIVOT provides is simpler and more readable than the syntax that may otherwise be specified in a complex series of SELECT...CASE statements.From microsoft.com
标签: sql-server tsql pivot dynamic-sql unpivot