none
Sumar valores al convertir a tabla pivot en sql RRS feed

  • Pregunta

  • Recurro a ustedes en busca de ayuda

    Tengo una tabla cuyas filas requiero convertir a columas, esto ya lo hice, más sin embargo también requiero que al convertirse a columnas se sumen las cantidades en base a un dato.

    Ejemplo: 

    Mi tabla original es muy parecida a esto

    Y lo que quiero lograr es esto:

    Mi código en este momento es algo así:

    Con el cual solo logré agregar como columnas la pieza y kilogramo pero no sumarlas.

    select*from Tabla
    As SourceTable Pivot(AVG([Cantidad]) FOR [Unidad] IN ([PIEZA],
                                                                                  [KILOGRAMO])AS PivotTable; 
    

    Gracias por su ayuda.

    miércoles, 12 de septiembre de 2018 22:52

Respuestas

  • Hola Zarpis:

    La opción más simple es la trasposición.

    CREATE TABLE ej
    (id       INT,
     cantidad FLOAT,
     unidad   VARCHAR(10)
    );
    GO
    INSERT INTO ej
    (id,
     cantidad,
     unidad
    )
    VALUES
    (2,
     10,
     'PIEZA'
    ),
    (2,
     5,
     'PIEZA'
    ),
    (2,
     20,
     'KILOGRAMO'
    ),
    (3,
     5,
     'PIEZA'
    ),
    (3,
     2,
     'KILOGRAMO'
    );
    GO
    SELECT ID,
           SUM(CASE
                   WHEN UNIDAD = 'PIEZA'
                   THEN CANTIDAD
               END) AS 'PIEZA',
           SUM(CASE
                   WHEN UNIDAD = 'KILOGRAMO'
                   THEN CANTIDAD
               END) AS 'KILOGRAMO'
    FROM ej
    GROUP BY ID;

    Salida

    Un saludo

    • Propuesto como respuesta osrol jueves, 13 de septiembre de 2018 13:05
    • Marcado como respuesta Zarpis jueves, 13 de septiembre de 2018 16:33
    jueves, 13 de septiembre de 2018 11:46

Todas las respuestas

  • Hola Zarpis:

    La opción más simple es la trasposición.

    CREATE TABLE ej
    (id       INT,
     cantidad FLOAT,
     unidad   VARCHAR(10)
    );
    GO
    INSERT INTO ej
    (id,
     cantidad,
     unidad
    )
    VALUES
    (2,
     10,
     'PIEZA'
    ),
    (2,
     5,
     'PIEZA'
    ),
    (2,
     20,
     'KILOGRAMO'
    ),
    (3,
     5,
     'PIEZA'
    ),
    (3,
     2,
     'KILOGRAMO'
    );
    GO
    SELECT ID,
           SUM(CASE
                   WHEN UNIDAD = 'PIEZA'
                   THEN CANTIDAD
               END) AS 'PIEZA',
           SUM(CASE
                   WHEN UNIDAD = 'KILOGRAMO'
                   THEN CANTIDAD
               END) AS 'KILOGRAMO'
    FROM ej
    GROUP BY ID;

    Salida

    Un saludo

    • Propuesto como respuesta osrol jueves, 13 de septiembre de 2018 13:05
    • Marcado como respuesta Zarpis jueves, 13 de septiembre de 2018 16:33
    jueves, 13 de septiembre de 2018 11:46
  • Muchas gracias por tu respuesta, me sirvió mucho para adaptarla a mi tabla.
    jueves, 13 de septiembre de 2018 16:33