Выполнение этого запроса в SQL Server 2008 сейчас, но в ближайшее время планируем перенести его в создание отчета в службах отчетов SQL:
SELECT * from ( SELECT Amount, Year, column1, column2,column3 from BUYSCTE ) BUY
Результаты моей таблицы, выполняющиеся над запросом без сводки, следующие:
Column1 | Column2 | Column3| FYYear| Amount|
1 cat dog 2011 50
1 cat dog 2012 75
1 cat dog 2013 65
2 fish snake 2011 23
2 fish snake 2012 39
2 fish snake 2013 59
..
..
.. 2016
так что в основном я хочу, чтобы результаты заканчивались так:
Column1 | Column2 | Column3| 2011| 2012 | 2013
1 cat dog 50 75 65
2 fish snake 23 39 59
Итак, запрос, который я предложил, чтобы это произошло, - я сначала создал табличную переменную, сделал ее динамической переменной и сделал такой вот разворот,
declare @Year nvarchar(Max)
set @Year = STUFF(
(SELECT ', ' + quotename(FYYear)
from BUYSCTE Group By FYYear order by
FYYear For XML PATH(''))
, 1, 2, '');
Вышеуказанное значение заполняется значением @Year: [2011], [2012], [2013], [2014], [2015], [2016]
Я знаю, что, поскольку я изменяю выше, выберите SELECT @Year, чтобы проверить, правильно ли установлено значение
оттуда я изменяю вышеупомянутый выбор после табличной переменной на
SELECT * from ( SELECT Amount, FYYear, column1, column2,column3 from BUYSCTE ) BUY
PIVOT( SUM(Amount) FOR FYYear in ([@Year]) ) pvt
но мои результаты в итоге становятся такими
Column1 | Column2 | Column3| @Year|
1 cat dog null
2 fish snake null
Что я делаю не так? Кажется, что-то маленькое, чего мне не хватает, я не вижу себя. даже если я изменю статистическую функцию с SUM на COUNT, для значений столбца @Year вместо 0 будет ноль