【发布时间】:2015-05-07 12:27:19
【问题描述】:
我想知道如何翻转该查询的行/列:
SELECT *
FROM (SELECT YEAR(DATA_DOC) AS YEAR, DATENAME(MONTH, DATA_DOC) AS MONTH, SUM(IMP) AS TOTAL
FROM MyTable
WHERE YEAR(DATA_DOC) BETWEEN 2011 AND 2014
GROUP BY YEAR(DATA_DOC), DATENAME(MONTH, DATA_DOC)
) AS REPORT
PIVOT
(
SUM(TOTAL) FOR MONTH IN (January,....ecc...)
) AS REPORT_T
此查询以这种方式返回结果:
Year | January | February | ecc.....
2011 | 1000 | 500 | ....
2012 | 250 | 1110 | ....
2013 | 0 | 150 | ....
2014 | 880 | 450 | ....
我可以反转列和行,以便得到:
Month | 2011 | 2012 | 2013
January | 1000 | 500 | ....
February | 250 | 1110 | ....
... | 0 | 150 | ....
... | 880 | 450 | ....
我可能应该使用 UNPIVOT 但我不能应用它。
【问题讨论】:
-
这里的问题是,与月份不同,年份不是一个定义的集合。因为你有 n 年的可能性,所以枢轴必须使用动态 SQL。 @BlueFeet 通常会回答这些问题,所以我只会指出他/她的一个出色答案:stackoverflow.com/questions/10404348/…
标签: sql sql-server pivot unpivot