Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/01/2012, 17:00
Avatar de AWesker
AWesker
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 16 años
Puntos: 27
Respuesta: Transformar N filas a N columnas

Buscando el Internet y con la ayuda de uno de mis compañeros de trabajo, hemos podido convertir las N filas en N columnas (no como lo imaginé al principio, pero muy parecido). Comparto el código por si les interesa:

Código SQL:
Ver original
  1. DECLARE @Lista VARCHAR(MAX)
  2. DECLARE @Periodo AS DATETIME
  3.  
  4. SET @Periodo =(SELECT MIN(Periodo) FROM vwConsolidados WHERE Codigo = 'ABCDE001')
  5. SET @Lista = N''
  6.  
  7. WHILE @Periodo IS NOT NULL
  8. BEGIN
  9.   SET @Lista = @Lista + N',['+ CONVERT(VARCHAR, @Periodo, 103) + N']'
  10.   SET @Periodo =(SELECT MIN(Periodo) FROM vwConsolidados WHERE  Periodo > @Periodo AND Codigo = 'ABCDE001')
  11. END
  12. print @Lista
  13. SET @Lista = SUBSTRING(@Lista, 2, LEN(@Lista))
  14. --PRINT 'ok'
  15. --PRINT @Lista
  16.  
  17. DECLARE @Consulta AS nvarchar(MAX)
  18. SET @Consulta = N'SELECT *  
  19.            FROM (SELECT Periodo, Monto FROM vwConsolidados Where Codigo = ''ABCDE001''
  20.            )PIV
  21.            PIVOT (SUM(Monto) FOR  Periodo IN ('+ @Lista  + ')) AS Periodos'
  22.  
  23. EXEC sp_executesql @Consulta

Donde:
vwConsolidadoMediciones = nombre de una vista agrupada por Codigo y Periodo.
Monto = Sumatoria en la vista de un campo con el mismo nombre (Monto).

Y esta es una imágen de los resultados (vale destacar que los resultados de la suma son iguales porque en casi todos los casos son constantes):


Lo único que me falta es agregar el prefijo "Suma_" a los encabezados

¿Alguna sugerencia?