この結果のデータを行ではなく列に表示したいと思います。のように: 2011_1 = ある値、2011_2 = ある値、...
SELECT
ls.Year,
ls.Month,
lsq.Quantity
FROM Log_Sales ls
INNER JOIN Log_SalesQuantity lsq ON ls.Id = lsq.LogSalesId AND lsq.SaleStatisticTypeId = 1
WHERE (ls.ProductId = 57983) AND
(ls.BranchId = 1) AND
(ls.Year in (2011,2012,2013))
今、私はこの結果を得ます:
Year Month Quantity
2011 1 9220
2011 2 10211
2011 3 7269
2011 4 7050
2011 5 8543
2011 6 7539
2011 7 6103
2011 8 8905
2011 9 5588
2011 10 5840
2011 11 8041
2011 12 5991
2012 1 11233
2012 2 2829
2012 3 4440
2012 4 7842
2012 5 8557
2012 6 11299
2012 7 10560
2012 8 8350
2012 9 7627
2012 10 9511
2012 11 5293
2012 12 7030
2013 1 6148
2013 2 2774
2013 3 3737
2013 4 2350
2013 5 4016
2013 6 2300
ピボットを使用しようとすると、次のクエリまで取得します:
SELECT [1] as '2013_1', [2]as '2013_2', [3]as '2013_3', [4]as '2013_4', [5]as '2013_5', [6]
as '2013_6', [7]as '2013_7', [8]as '2013_8', [9]as '2013_9', [10]as '2013_10', [11]as '2013_11',
[12]as '2013_12'
FROM
(SELECT ls.Month,
lsq.Quantity
FROM Log_Sales ls
INNER JOIN Log_SalesQuantity lsq ON ls.Id = lsq.LogSalesId AND
lsq.SaleStatisticTypeId = 1
WHERE (ls.ProductId = 57983) AND
(ls.BranchId = 1) AND
(ls.Year = 2013) ) AS SourceTable
PIVOT
(
sum(Quantity)
FOR [Month] IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS PivotTable;
2013_1 2013_2 2013_3 2013_4 2013_5 2013_6 2013_7 2013_8 2013_9 2013_10 2013_11 2013_12
6148 2774 3737 2350 4016 2300 NULL NULL NULL NULL NULL NULL
すでに良いことですが、3年間はダイナミックにしたいと考えています。今は 2011 年、2012 年、2013 年ですが、来年は 2012 年、2013 年、2014 年になります。
この結果に到達するための最良の方法は何ですか? たぶん、ピボット以外のソリューションがありますか?大規模でより複雑なクエリのこの部分に注意してください。