lunes, 2 de mayo de 2016

UNPIVOT - Columnas a Filas


El siguiente script ayuda a pasar información que está en columnas en filas, respetando el nombre de la columna y su valor, para ello se deben convertir todos los valores de las n columnas en un solo tipo de dato para que la función UNPIVOT funcione correctamente.


se crea la tabla como variable:

DECLARE @T1 AS TABLE (ID   INT, NAME VARCHAR(30), FECHA  DATE, OTRA VARCHAR(MAX))
INSERT INTO @T1
SELECT 1, 'OMAR', GETDATE(), 'xxxxxxxxxxx' UNION ALL
SELECT 2, 'MANUEL', '2016-05-05', '*************';



select * from @T1;

el resultado es el siguiente:









Ahora lo que se quiere es pasar esos registros con las columnas en filas.
así:













para lograrlo se ejecuta la función UNPIVOT Asi:



WITH TABLA AS
    (
        -- Common table Expression para convertir todos los datos en un solo tipo
        SELECT
                     ID
                    ,NAME =  CONVERT(VARCHAR(MAX), Name)
                    ,FECHA = CONVERT(VARCHAR(MAX), FECHA)
                    ,OTRA  = CONVERT(VARCHAR(MAX), OTRA)
        FROM @T1
       )

SELECT
              ID
             ,columna
             ,valor
FROM TABLA
unpivot
       (
           valor for columna in ([name],[fecha],[otra])
          ) as unpvt


esto fue un ejemplo simple.


























No hay comentarios.:

Publicar un comentario