Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine MySQL-Tabelle mit dynamischen Spaltennamen aus Zeilenwerten Pivotieren?
MySQL: Dynamische Zeilenwerte als Spaltennamen
Frage:
Wie erstellt man eine MySQL-Abfrage, die eine alte Tabelle mit variablen Spaltennamen in eine Tabelle mit festen Spaltennamen konvertiert, wobei jeder eindeutige Zeilenwert für eine bestimmte Spalte zu einem Spaltennamen wird?
Hintergrund:
Betrachten Sie eine Tabelle mit der folgenden Struktur:
<code>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>
Anforderungen:
Konvertieren Sie die Tabelle in das folgende Format:
<code>id timezone language country something --------------------------------------------------- 0 Europe/London en 45 x 1 Europe/Paris fr 46</code>
MySQL unterstützt keine nativen Pivot-Operationen, daher müssen wir eine Problemumgehung finden.
Lösung:
GROUP_CONCAT()
können dynamisch Abfragen generiert werden, die das gewünschte Tabellenformat erstellen. GROUP_CONCAT()
zum Erstellen der endgültigen Abfrage verwendet. PREPARE
und EXECUTE
, um eine dynamisch generierte Abfrage auszuführen. 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>
Hinweis:
GROUP_CONCAT()
Die Länge des Ergebnisses wird durch die Variable group_concat_max_len
begrenzt (Standard ist 1024 Byte). CASE WHEN
oder mehreren Unterauswahlen/Joins verwenden, dies erfordert jedoch eine manuelle Handhabung eindeutiger Spaltenwerte. 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!