2017-06-19 2 views
2

Ich habe eine sehr einfache statische Tabelle:Wie konvertiert man diese Tabelle in eine Reihentabelle?

type  qty 
A   10 
B   20 
C   30 

Ich mag würde diese Tabelle in eine Zeile Ergebnis konvertieren. Ich benutze diese Abfrage:

SELECT type, 
    CASE WHEN type = 'A' THEN qty END AS 'A', 
    CASE WHEN type = 'B' THEN qty END AS 'B', 
    CASE WHEN type = 'C' THEN qty END AS 'C' 
FROM mytable 
GROUP BY type 

Das Ergebnis ist:

type  A  B  C 
    A  10  NULL  NULL 
    B NULL 20  NULL  
    C NULL NULL  30 

meine gewünschte Ausgabe:

A B C 
10 20 30 
+0

Sie auf 'SUM haben werden()', dass. Warum nicht einfach 'GROUP BY' und die Transformation in Ihrem Anwendungscode durchführen? – tadman

+0

Ich muss die gewünschte Ausgabe über mySQL-Abfrage erhalten – ashura91

Antwort

0

Sie müssen eine Spalte mehr haben, um diese mit max() oder die Summe transponieren() und gruppieren nach. Wenn Sie nach Typ gruppieren, erhalten wir separate Mengen für jedes von "A", "B" und "C", so dass wir separate Zeilen sehen.

Beispiel:

id Type Quantity 
1 A 10 
1 B 20 
1 C 30 

Die Abfrage unten mit beiden MySQL 5.7 (ONLY_FULL_GROUP_BY-Modus) und 5.6 als auch funktionieren würde. (Getestet mit v5.7.18 Standardeinstellung.)

SELECT 
    MAX(CASE 
     WHEN Type = 'A' THEN qty 
     ELSE NULL 
    END) AS A, 
    MAX(CASE 
     WHEN Type = 'B' THEN qty 
     ELSE NULL 
    END) AS B, 
    MAX(CASE 
     WHEN Type = 'C' THEN qty 
     ELSE NULL 
    END) AS C 
FROM 
    myTable 
GROUP BY id; 

wo, wie diese mit MySQL 5.7 (ONLY_FULL_GROUP_BY Modus) nicht

Select id, Type from MyTable group by id; 
Verwandte Themen