2012-03-13 23 views
5

Mam proste pytanie, które daje wyniki poniżej:Transpozycja MySQL Query wiersze na kolumny

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

chciałbym przenieść wiersze na kolumny.

Rozumiem mysql nie posiada funkcji pivot więc wymagana jest związek, ale nie 100% pewny.

Z góry dziękujemy za pomoc.

+1

możliwy duplikat [Jak przestawić schemat jednostki-wartość-podmiot MySQL] (http://stackoverflow.com/questions/649802/how-to-pivot-a-mysql-entity-attribute-value-schema) –

+1

przejść przez ten [http://stackoverflow.com/questions/1851781/transpose-a-row-into-columns-with-mysql-without-using-unions] może pomóc. – Java

Odpowiedz

7

Można to zrobić za pomocą macierzy jak ta -

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` 

Na innym uwaga, należy przenieść wartości transporttype do tabeli odnośników i nie transporttype_id w tej tabeli.

+1

@RyanSmith (Uwaga), to odpowiedź powinna zrobić dla ciebie, jednak użytkownik może chcieć rozważyć dodanie roku jako dodatkowe grupy, w przypadku, gdy rozpiętość aktywności rok. Nie chciałbyś, aby fałszywe liczby przetoczyły się na rok od drugiego. – DRapp

+1

@Dzięki za uwagę ostrożności. Zmodyfikuję moje zapytanie, aby uwzględnić rok. – nnichols

+0

Dzięki milionowi, działa w 100%. – Smudger