none
CONVERTIR FILAS A COLUMNAS - CONSULTA SQL 2008 RRS feed

  • Pregunta

  • Buenas tardes

    Necesito convertir filas, en columnas,  que estoy haciendo para cargar en un Archivo  Excel.

     

    DOCUMENTO PRODUCTO CANTIDAD
    1003000002 122973           6.310
    1003000002 122909           11.120
    1003000002 122908           60.620
    1003000002 130195           34.350
    1003000205 123924           1.000
    1003000205 123943           15.000
    1003000205 122961           1.000

     

    DOCUMENTO, debe pasar a ser la columnas, y en cada columna ir las cantidades que existe según el PRODUCTO

     

    PRODUCTO    1003000002   1003000205
    122973               0                 6.310
    122909               0                 11.120
    122908               0                  60.620
    130195               0                  34.350
    123924           1.000
    123943           15.000
    122961           1.000

     

     

    miércoles, 16 de noviembre de 2016 20:56

Respuestas

  • prueba así

    use tempdb
    create table t ( documento int,producto int, cantidad int)
    insert into t values (1003000002, 122973,           6310),
    (1003000002,122909,11120),
    (1003000002,122908,60620),
    (1003000002,130195,34350),
    (1003000205,123924,1000),
    (1003000205,123943,15000),
    (1003000205,122961,1000)
    
    DECLARE @sql AS NVARCHAR(1000);
    
    SET @sql = N'SELECT producto,' +
    STUFF(
      (SELECT N',coalesce(' + QUOTENAME(documento)+',0) as ' +QUOTENAME(documento)
       FROM (SELECT DISTINCT documento FROM t) AS Y
       ORDER BY documento
       FOR XML PATH('')), 1, 1, N'')
     + '
    FROM (SELECT producto, documento , cantidad
          FROM t) AS D
      PIVOT( SUM(cantidad) FOR documento IN(' +
      
    STUFF(
      (SELECT N',' + QUOTENAME(documento) AS [text()]
       FROM (SELECT DISTINCT documento FROM t) AS Y
       ORDER BY documento
       FOR XML PATH('')), 1, 1, N'') + N')) AS P order by 2;';
    
    EXEC sys.sp_executesql @stmt = @sql;
    drop table t


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Propuesto como respuesta HunchbackMVP jueves, 17 de noviembre de 2016 13:38
    • Marcado como respuesta Laura CeglzModerator miércoles, 23 de noviembre de 2016 14:26
    jueves, 17 de noviembre de 2016 7:23
    Moderador

Todas las respuestas

  • Saludos

    Una pregunta por cada documento debe haber una columnas?

    miércoles, 16 de noviembre de 2016 21:32
  • prueba así

    use tempdb
    create table t ( documento int,producto int, cantidad int)
    insert into t values (1003000002, 122973,           6310),
    (1003000002,122909,11120),
    (1003000002,122908,60620),
    (1003000002,130195,34350),
    (1003000205,123924,1000),
    (1003000205,123943,15000),
    (1003000205,122961,1000)
    
    DECLARE @sql AS NVARCHAR(1000);
    
    SET @sql = N'SELECT producto,' +
    STUFF(
      (SELECT N',coalesce(' + QUOTENAME(documento)+',0) as ' +QUOTENAME(documento)
       FROM (SELECT DISTINCT documento FROM t) AS Y
       ORDER BY documento
       FOR XML PATH('')), 1, 1, N'')
     + '
    FROM (SELECT producto, documento , cantidad
          FROM t) AS D
      PIVOT( SUM(cantidad) FOR documento IN(' +
      
    STUFF(
      (SELECT N',' + QUOTENAME(documento) AS [text()]
       FROM (SELECT DISTINCT documento FROM t) AS Y
       ORDER BY documento
       FOR XML PATH('')), 1, 1, N'') + N')) AS P order by 2;';
    
    EXEC sys.sp_executesql @stmt = @sql;
    drop table t


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Propuesto como respuesta HunchbackMVP jueves, 17 de noviembre de 2016 13:38
    • Marcado como respuesta Laura CeglzModerator miércoles, 23 de noviembre de 2016 14:26
    jueves, 17 de noviembre de 2016 7:23
    Moderador
  • Miguel ya te dio la respuesta de como hacerlo en T-SQL, pero me pregunto si eso es para un reporte. Si usas SSRS entonces puedes usar una matrix para hacer el pivoteo.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    jueves, 17 de noviembre de 2016 13:41