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>
Anleitung:
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!