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!