SQL Server PIVOT句を2回以上使い行列変換する方法
通常PIVOTは1つの列を行に変換できますが、
複数の行を対象に変換することはできるのでしょうか。
対象:SQL Server 2012
TABLE:SALES 店舗 | 売上月 | 売上金額 | 販売数 A | 2013年 | 1000 | 100 A | 2014年 | 2000 | 200 A | 2015年 | 3000 | 300 B | 2014年 | 1000 | 100 B | 2015年 | 3000 | 300 C | 2015年 | 2000 | 200
以下のSQLで1行のみ売上を行列変換可能です。
SELECT *
FROM SALES
PIVOT (
SUM(売上金額) FOR 売上年 IN ([2013年], [2014年], [2015年])
)
売上金額と販売数の両方を行列変換する場合はどうすればよいのでしょうか。
店舗 | 2013年_売上金額 | 2014年_売上金額 | 2015年_売上金額 | 2013年_販売数 | 2014年_販売数 |... A | 1000 | 2000 | 3000 | 100 | 200 | 300 |...
WEBの情報を参考にしましたが、以下のSQLは動きませんでした。
ASを利用して項目名が重複しないようにしてもエラーは消えませんでした。
×PIVOTの中に対象の行を2つ記載
SELECT *
FROM SALES
PIVOT (
SUM(売上金額),SUM(販売数) FOR 売上年 IN ([2013年], [2014年], [2015年])
)
×PIVOTを2つ記載
SELECT *
FROM SALES
PIVOT (
SUM(売上金額) FOR 売上年 IN ([2013年], [2014年], [2015年])
)
PIVOT (
SUM(販売数) FOR 売上年 IN ([2013年], [2014年], [2015年])
)
現在はPIVOTを使わずにCASE式とGROUP BY句で実装しています。