2012-03-13 367 views
5

que tienen una consulta sencilla que produce los resultados siguientes:transponer filas de consulta de MySQL en columnas

SELECT month,transporttype,count(transporttype) as loads 
from deliveries 
group by month,transporttype 

quisiera transponer las filas en columnas.

Entiendo que mysql no tiene funciones de pivote, por lo que se requiere una unión pero no está 100% seguro.

Gracias de antemano por la ayuda.

+1

posible duplicado de [Cómo pivotar un esquema de valor de atributo de entidad MySQL] (http://stackoverflow.com/questions/649802/how-to-pivot-a-mysql-entity-attribute-value-schema) –

+1

Revise esto [http://stackoverflow.com/questions/1851781/transpose-a-row-into-columns-with-mysql-without-using- unions] podría ayudarlo. – Java

Respuesta

7

Puede hacerlo con una tabla de referencias cruzadas como esto -

SELECT 
    `year`, 
    `month`, 
    SUM(IF(`transporttype` = 'inbound',     1, 0)) AS `inbound`, 
    SUM(IF(`transporttype` = 'LocalPMB',    1, 0)) AS `LocalPMB`, 
    SUM(IF(`transporttype` = 'Long Distance',   1, 0)) AS `Long Distance`, 
    SUM(IF(`transporttype` = 'shuttle',     1, 0)) AS `shuttle`, 
    SUM(IF(`transporttype` = 'export',     1, 0)) AS `export`, 
    SUM(IF(`transporttype` = 'Extrusions-LongDistance', 1, 0)) AS `Extrusions-LongDistance`, 
    SUM(IF(`transporttype` = 'Extrusions-Shuttle',  1, 0)) AS `Extrusions-Shuttle` 
FROM `deliveries` 
GROUP BY `year`, `month` 

En otro orden de cosas, debe mover los valores transportType a una tabla de consulta y ha transporttype_id en esta tabla.

+1

@RyanSmith (nota), Esta respuesta debería hacerlo por usted, sin embargo, es posible que desee considerar agregar el AÑO como un grupo adicional en caso de que abarque la actividad del año. No querrás que los números falsos se acumulen en un año frente a otro. – DRapp

+1

@DRapp gracias por la nota de precaución. Modificaré mi consulta para incluir el año. – nnichols

+0

Gracias a un millón, funciona al 100%. – Smudger

Cuestiones relacionadas