MySQL Pivot: Spalten in Zeilen konvertieren
In MySQL muss eine Pivot-Tabelle durch Konvertieren von Spalten in Zeilen generiert werden, um die Daten besser darzustellen. Stellen Sie sich beispielsweise eine Tabelle vor, die mehrere Spalten (z. B. Spalte 1, Spalte 2) enthält, die Daten für verschiedene Monate (z. B. Januar, Februar) darstellen.
Anforderungen: Erstellen Sie einen Bericht, der Daten in einem Pivot-Tabellenformat darstellt, wobei jede Zeile eine Spalte in der Originaltabelle und jede Spalte einen anderen Monat darstellt.
Datenerweiterung:
MySQL fehlen integrierte Funktionen zum Entfalten von Daten (Konvertieren von Spalten in Zeilen). Dies kann jedoch mit einer UNION ALL-Abfrage erreicht werden:
<code class="language-sql">SELECT id, month, col1 AS value, 'col1' AS descrip FROM yourtable UNION ALL SELECT id, month, col2 AS value, 'col2' AS descrip FROM yourtable UNION ALL SELECT id, month, col3 AS value, 'col3' AS descrip FROM yourtable UNION ALL SELECT id, month, col4 AS value, 'col4' AS descrip FROM yourtable</code>
Ergebnis:
Diese Abfrage konvertiert die Daten in das folgende Format:
ID | MONTH | VALUE | DESCRIP |
---|---|---|---|
101 | Jan | A | col1 |
101 | Jan | B | col2 |
101 | Jan | NULL | col3 |
101 | Jan | B | col4 |
102 | Feb | C | col1 |
102 | Feb | A | col2 |
102 | Feb | G | col3 |
102 | Feb | E | col4 |
Pivot:
Sobald die Daten erweitert sind, können sie mithilfe von Aggregatfunktionen in das gewünschte Pivot-Tabellenformat konvertiert werden. Die folgende Abfrage verwendet eine CASE-Anweisung, um die Daten nach jeder Spalte (Beschreibung) zu gruppieren und die Werte für Januar und Februar anzuzeigen:
<code class="language-sql">SELECT descrip, MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS Jan, MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS Feb FROM ( SELECT id, month, col1 AS value, 'col1' AS descrip FROM yourtable UNION ALL SELECT id, month, col2 AS value, 'col2' AS descrip FROM yourtable UNION ALL SELECT id, month, col3 AS value, 'col3' AS descrip FROM yourtable UNION ALL SELECT id, month, col4 AS value, 'col4' AS descrip FROM yourtable ) src GROUP BY descrip</code>
Ergebnis:
Diese Abfrage generiert das erforderliche Pivot-Tabellenformat:
DESCRIP | JAN | FEB |
---|---|---|
col1 | A | C |
col2 | B | A |
col3 | 0 | G |
col4 | B | E |
Das obige ist der detaillierte Inhalt vonWie werden Daten in MySQL geschwenkt: Spalten in Zeilen umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!