Tricks zum Konvertieren von Spalten in Zeilen in MySQL
Wenn Sie in MySQL mit spaltenorganisierten Daten arbeiten, müssen Sie diese möglicherweise in ein Format konvertieren, das die Daten in Zeilen darstellt. Dieser Vorgang wird als Unpivoting bezeichnet.
Frage:
Betrachten Sie das folgende Formular:
<code>ID | a | b | c 1 | a1 | b1 | c1 2 | a2 | b2 | c2</code>
Das Ziel besteht darin, Spalten in Zeilen umzuwandeln, um eine Tabelle mit der folgenden Struktur zu erhalten:
<code>ID | 值 | 列名 1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c</code>
Lösung:
Im Gegensatz zu einigen anderen Datenbanken verfügt MySQL nicht über eine integrierte Entladefunktion. Um die gewünschten Ergebnisse zu erhalten, können Sie die Abfrage UNION ALL
verwenden, um separate Abfragen zu kombinieren, die jede Spalte selektiv in Zeilen umwandeln:
<code class="language-sql">SELECT id, 'a' AS col, a AS value FROM yourtable UNION ALL SELECT id, 'b' AS col, b AS value FROM yourtable UNION ALL SELECT id, 'c' AS col, c AS value FROM yourtable;</code>
Diese Abfrage generiert drei Datensätze: einen für jede Spalte. Jede Gruppe enthält die ID, den Spaltennamen und den entsprechenden Wert.
Verwenden Sie CROSS JOIN:
Eine andere Möglichkeit ist die Verwendung von CROSS JOIN
:
<code class="language-sql">SELECT t.id, c.col, CASE c.col WHEN 'a' THEN a WHEN 'b' THEN b WHEN 'c' THEN c END AS data FROM yourtable t CROSS JOIN ( SELECT 'a' AS col UNION ALL SELECT 'b' UNION ALL SELECT 'c' ) c;</code>
In diesem Fall erstellt CROSS JOIN
ein kartesisches Produkt zwischen den Zeilen von yourtable
und den Zeilen der Unterabfrage, die die Spaltennamen generiert. Die CASE
-Anweisung ordnet jeden Spaltennamen dem entsprechenden Spaltenwert zu.
Beide Methoden entschlüsseln die Daten effektiv und geben Ihnen die gewünschte zeilenbasierte Struktur.
Das obige ist der detaillierte Inhalt vonWie entpivotiere ich Spalten in Zeilen in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!