Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine MySQL-Tabelle mit dynamischen Spaltennamen aus Zeilenwerten Pivotieren?

Wie kann ich eine MySQL-Tabelle mit dynamischen Spaltennamen aus Zeilenwerten Pivotieren?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-13 20:01:43581Durchsuche

How Can I Pivot a MySQL Table with Dynamic Column Names from Row Values?

Dynamische MySQL-Zeilenwerte als Spaltennamen

MySQL verfügt nicht über die native Pivot-Funktionalität für Legacy-Tabellendaten, die dynamische Zeilenwerte als Spaltennamen haben und im Pivot-Tabellenformat angezeigt werden. Vorbereitete Anweisungen mit GROUP_CONCAT() können jedoch dabei helfen, die gewünschten Ergebnisse zu erzielen.

Beispieltabelle:

<code class="language-sql">id    name       value
------------------------------
0     timezone   Europe/London
0     language   en
0     country    45
0     something  x
1     timezone   Europe/Paris
1     language   fr
1     country    46</code>

Zielausgabe:

<code>id    timezone       language    country  something
---------------------------------------------------
0     Europe/London  en          45       x
1     Europe/Paris   fr          46</code>

Konstruieren Sie die vorbereitete Aussage wie folgt:

<code class="language-sql">SELECT CONCAT(
  'SELECT `table`.id', GROUP_CONCAT('
     ,    `t_', REPLACE(name, '`', '``'), '`.value
         AS `', REPLACE(name, '`', '``'), '`'
     SEPARATOR ''),
 ' FROM `table` ', GROUP_CONCAT('
     LEFT JOIN `table`   AS `t_', REPLACE(name, '`', '``'), '`
            ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id
           AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)
     SEPARATOR ''),
 ' GROUP BY `table`.id'
) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;

PREPARE stmt FROM @qry;
EXECUTE stmt;</code>

Diese Abfrage generiert dynamisch eine SELECT-Anweisung, die LEFT JOIN verwendet, um Zeilen mit demselben id-Wert zu kombinieren und den entsprechenden Wert für einen eindeutigen name-Wert zu extrahieren. Drücken Sie dann id, um die Ergebnisse zu gruppieren und das gewünschte Pivot-Tabellenformat zu generieren.

Obwohl MySQL nicht über native Pivot-Funktionen verfügt, bietet diese Methode eine Möglichkeit, Daten aus Legacy-Tabellen mit dynamischen Spaltennamen auf strukturierte Weise abzurufen.

Das obige ist der detaillierte Inhalt vonWie kann ich eine MySQL-Tabelle mit dynamischen Spaltennamen aus Zeilenwerten Pivotieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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