Sql Server:如何将行转换为列?
这(可能)是一个已经被问过的问题。。。但是我有一些困难来解决我的问题。 我需要将基于行的查询转换为列。 我解释: 这是我的实际查询结果Sql Server:如何将行转换为列?,sql,Sql,这(可能)是一个已经被问过的问题。。。但是我有一些困难来解决我的问题。 我需要将基于行的查询转换为列。 我解释: 这是我的实际查询结果 Year Month Value 2010 Jan 19 2010 Feb 10 ... 我需要 Year Jan Feb ... Dec 2010 19 20 ... ...
Year Month Value
2010 Jan 19
2010 Feb 10
...
我需要
Year Jan Feb ... Dec
2010 19 20 ... ...
2011 11 .. ...
实际上,我的主要问题很简单
SELECT SUM(QTYCALC) AS TOT, YEAR(SCHEDSTART) AS MyYear, MONTH(SCHEDSTART) AS MyMonth
FROM PRODTABLE
GROUP BY YEAR(SCHEDSTART), MONTH(SCHEDSTART)
提前感谢您需要使用
PIVOT
来实现这一点-有关解释和一些示例,请参阅和
另一种选择是:
SELECT
YEAR(SCHEDSTART) AS MyYear,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 1 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Jan,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 2 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Feb,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 3 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Mar,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 4 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Apr,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 5 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS May,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 6 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Jun,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 7 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Jul,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 8 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Aug,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 9 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Sep,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 10 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Oct,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 11 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Nov,
(SELECT SUM(X.QTYCALC) FROM PRODTABLE X WHERE MONTH(X.SCHEDSTART) = 12 AND YEAR(X.SCHEDSTART) = YEAR(P.SCHEDSTART)) AS Dec
FROM PRODTABLE P
GROUP BY YEAR(P.SCHEDSTART)
关于性能/执行计划,您应该同时检查(
PIVOT
和this)…您正在使用哪个数据库?每个RDBMS都有不同的解决方案。请张贴您使用的数据库品牌。