Я хотел бы иметь данные из этого результата в столбцах вместо строк. как: 2011_1 = некоторое значение, 2011_2 = SomeValue ...SQL Pivot данные, где два столбца становятся едиными
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
Что уже хорошо, но я хочу иметь три года динамичного. Теперь это 2011,2012,2013, но в следующем году это будет 2012,2013,2014.
Каков наилучший способ достичь этого результата? Может быть, тогда есть другие решения? Имейте в виду, что эта часть большого, более сложного запроса.
Я ищу такой результат, но без динамического запроса – Koen