Heim > Datenbank > MySQL-Tutorial > Wie konvertiere ich Zeilen dynamisch in Spalten in MySQL?

Wie konvertiere ich Zeilen dynamisch in Spalten in MySQL?

Patricia Arquette
Freigeben: 2025-01-14 11:22:46
Original
815 Leute haben es durchsucht

How to Dynamically Convert Rows to Columns in MySQL?

Dynamische MySQL-Zeilen-zu-Spalten-Abfrage

MySQL unterstützt die Konvertierung von Zeilendaten in Spaltendaten, sodass neue Spalten bei Bedarf dynamisch hinzugefügt werden können. Dieser Prozess wird oft mit Pivot-Tabellen in Verbindung gebracht, die Daten in einem benutzerfreundlicheren und tabellarischen Format darstellen. Um diese Konvertierung zu erreichen, können Sie die Funktionen GROUP BY und MAX verwenden.

Das Folgende ist ein Beispiel mit Tabelle A und Tabelle B:

<code>表 A
+--+-----+----+
|id|order|data|
+--+-----+----+
|1 |1    |P   |
+--+-----+----+
|2 |2    |Q   |
+--+-----+----+
|2 |1    |R   |
+--+-----+----+
|1 |2    |S   |
+--+-----+----+

表 B
+--+----+----+
|id|name|value|
+--+----+----+
|1 |name1|data1|
+--+----+----+
|1 |name2|data2|
+--+----+----+
|2 |name1|data3|
+--+----+----+
|2 |name2|data4|
+--+----+----+</code>
Nach dem Login kopieren

Um diese Datenstruktur in eine Tabelle mit Zeilen und Spalten umzuwandeln, können Sie die folgende Abfrage verwenden:

<code class="language-sql">SELECT  ID,
        MAX(IF(`order` = 1, data, NULL)) AS data1,
        MAX(IF(`order` = 2, data, NULL)) AS data2
FROM    TableA
GROUP   BY ID</code>
Nach dem Login kopieren

Die Ausgabe dieser Abfrage lautet:

<code>+--+-----+-----+
|id|data1|data2|
+--+-----+-----+
|1 |P    |S    |
+--+-----+-----+
|2 |R    |Q    |
+--+-----+-----+</code>
Nach dem Login kopieren

Wie Sie sehen können, wurde jede Zeile in Tabelle B in eine Spalte in der resultierenden Tabelle umgewandelt.

Wenn Ihre Daten mehrere Werte für dasselbe „Bestell“-Feld enthalten, können Sie dynamisches SQL kombinieren, um die Transformation effizienter durchzuführen. Bei dieser Methode werden Abfragen dynamisch generiert, die auf verschiedenen Werten des Felds „Bestellung“ basieren:

<code class="language-sql">SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`)
  ) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT  ID, ', @sql, ' 
                  FROM    TableName
                  GROUP   BY ID');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;</code>
Nach dem Login kopieren

Der Vorteil dieses dynamischen SQL-Ansatzes besteht darin, dass die Abfrage nicht jedes Mal manuell geändert werden muss, wenn ein neuer Wert zum Feld „Bestellung“ hinzugefügt wird.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich Zeilen dynamisch in Spalten in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage