2011-11-09 18 views
0

これは(多分)すでに質問されています...しかし、私は問題を解決するためにいくつかの困難を抱えています。 行ベースのクエリを列に転記する必要があります。 私は説明: これは私の実際のクエリ結果Sql Server:行を列に転記する方法は?

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) 

おかげ

+0

を両方をチェックする必要がありますか? – Yahia

+0

各RDBMSには異なる解決策があります。あなたが使っているデータベースブランドを投稿してください。 – danihp

+0

Sql Server 2008 – stighy

答えて

1

これを達成するにはPIVOTを使用する必要があります。 anationといくつかの例がhttp://msdn.microsoft.com/en-us/library/ms177410.aspxhttp://www.simple-talk.com/community/blogs/andras/archive/2007/09/14/37265.aspx

を参照してください別のオプションは、次のようになります。

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、これ)DBは、使用している

関連する問題