Heim > Datenbank > MySQL-Tutorial > Wie kann ich Daten in MySQL mit dynamischen Spaltennamen aus einer einzelnen Spalte Pivotieren?

Wie kann ich Daten in MySQL mit dynamischen Spaltennamen aus einer einzelnen Spalte Pivotieren?

Linda Hamilton
Freigeben: 2025-01-13 19:57:44
Original
236 Leute haben es durchsucht

How to Pivot Data in MySQL with Dynamic Column Names from a Single Column?

Dynamischer MySQL-Zeilenwert als Spaltennamen-Pivot

Frage:

In älteren MySQL-Tabellen hatten Ihre Daten veränderbare Spaltennamen, die als eindeutige Werte in einer einzelnen Spalte mit dem Namen „Name“ gespeichert waren. Sie benötigen eine Abfrage, die diese Daten in ein Pivot-Format umwandelt, wobei die Namenswerte zu den Spaltenüberschriften und die entsprechenden Feldwerte zu den Werten unter diesen Überschriften werden.

Lösung:

Trotz der fehlenden nativen Unterstützung für Pivots kann MySQL dies dennoch durch dynamisches SQL und die Funktion GROUP_CONCAT() erreichen.

MySQL-Abfrage:

<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>
Nach dem Login kopieren

Anleitung:

  1. Die Unterabfrage wählt verschiedene Namenswerte aus und generiert eine UNION-Abfrage, um die verschiedenen für den Pivot erforderlichen Spaltennamen darzustellen.
  2. Die CONCAT()-Funktion verkettet SQL-Strings und verwendet GROUP_CONCAT, um Spaltennamen dynamisch mit ihren Werten zu verbinden.
  3. Es erstellt eine temporäre gespeicherte Prozedur stmt unter Verwendung der generierten SQL-Zeichenfolge.
  4. Die EXECUTE stmt-Anweisung führt dynamische SQL-Abfragen aus und schwenkt die Daten wie erwartet um.

Ergebnis:

Die Abfrage gibt eine Pivot-Ergebnismenge mit Namenswerten als Spaltenüberschriften und Feldwerten als entsprechenden Werten zurück:

id timezone language country something
0 Europe/London en 45 x
1 Europe/Paris fr 46 NULL

Das obige ist der detaillierte Inhalt vonWie kann ich Daten in MySQL mit dynamischen Spaltennamen aus einer einzelnen Spalte Pivotieren?. 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