2012-03-13 20 views
5

Ho una query semplice che produce i risultati seguenti:Trasposizione righe di query mysql in colonne

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

desidero trasporre le righe in colonne.

Capisco che mysql non ha funzioni di pivot quindi è necessaria un'unione ma non sicura al 100%.

Grazie in anticipo per l'aiuto.

+1

possibile duplicato di [Come ruotare uno schema entità-attributo di entità MySQL] (http://stackoverflow.com/questions/649802/how-to-pivot-a-mysql-entity-attribute-value-schema) –

+1

Passare attraverso questo [http://stackoverflow.com/questions/1851781/transpose-a-row-into-columns-with-mysql-without-using-unions] potrebbe aiutarti. – Java

risposta

7

È possibile farlo con un campo incrociato come questo -

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` 

Su una nota diversa, è necessario spostare i valori transportType ad una tabella di ricerca e hanno transporttype_id in questa tabella.

+1

@RyanSmith (nota), questa risposta dovrebbe farlo per voi, tuttavia, potreste voler considerare di aggiungere l'ANNO come gruppo aggiuntivo nel caso in cui vi sia un'attività di un anno. Non vorrai che i numeri falsi vengano fatti rotolare in un anno rispetto all'altro. – DRapp

+1

@Drapp grazie per la nota di cautela. Modificherò la mia richiesta per includere l'anno. – nnichols

+0

Grazie mille, funziona al 100%. – Smudger

Problemi correlati