dynamic sql pivot en sql server
Ejecute esta consulta en SQL Server 2008 ahora, pero pronto planee moverla para crear un informe en SQL Report Services:
SELECT * from ( SELECT Amount, Year, column1, column2,column3 from BUYSCTE ) BUY
Los resultados de mi tabla que se ejecutan sobre la consulta sin el pivote es esta
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
so básicamente quiero que los resultados terminen así:
Column1 | Column2 | Column3| 2011| 2012 | 2013
1 cat dog 50 75 65
2 fish snake 23 39 59
so la consulta que se me ocurrió para que esto suceda es que primero creé una variable de tabla y la convertí en una variable dinámica e hice un pivote como este,
declare @Year nvarchar(Max)
set @Year = STUFF(
(SELECT ', ' + quotename(FYYear)
from BUYSCTE Group By FYYear order by
FYYear For XML PATH(''))
, 1, 2, '');
Lo anterior completa el valor @Año con: [2011], [2012], [2013], [2014], [2015], [2016]
Lo sé porque cambio la selección anterior a SELECCIONAR @Año solo para verificar si el valor está configurado correctamente
desde allí cambio la selección anterior después de la variable de tabla a
SELECT * from ( SELECT Amount, FYYear, column1, column2,column3 from BUYSCTE ) BUY
PIVOT( SUM(Amount) FOR FYYear in ([@Year]) ) pvt
pero mis resultados terminan siendo este
Column1 | Column2 | Column3| @Year|
1 cat dog null
2 fish snake null
¿Qué estoy haciendo mal? Parece que me falta algo pequeño que no puedo verme a mí mismo. incluso si cambio la función agregada de SUM a COUNT, da 0 para los valores de la columna @Year en lugar de nulo