Heim >Datenbank >MySQL-Tutorial >Wie kann ich in MySQL dynamische Zeilenwerte in Spaltennamen umwandeln?
Konvertieren Sie dynamische Zeilenwerte mithilfe von MySQL in Spaltennamen
In älteren Tabellen mit festen Strukturen kann es eine Herausforderung sein, Daten im Pivot-Format zu erhalten. MySQL verfügt nicht über native Pivot-Funktionen und erfordert die Verwendung vorbereiteter Anweisungen, um dieses Problem zu lösen.
Betrachten Sie die folgende Legacy-Tabelle:
<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>
Gewünschte Ausgabe unter Verwendung dynamischer Zeilenwerte als Spaltennamen:
<code>id timezone language country something --------------------------------------------------- 0 Europe/London en 45 x 1 Europe/Paris fr 46</code>
Im Gegensatz zu anderen RDBMS erfordert MySQL einen Indirektionsansatz. Der bevorzugte Ansatz ist die Erstellung vorbereiteter Aussagen.
<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 verwendet GROUP_CONCAT()
, um eine dynamische SQL-Anweisung zu erstellen, um die erforderlichen JOINs und Spaltenaliase zu verbinden. Anschließend werden die generierten SQL-Anweisungen vorbereitet und ausgeführt.
Dieser Ansatz ermöglicht die Verwendung eindeutiger Zeilenwerte als variable Spaltennamen, ohne dass hartcodierte Unterauswahlen oder CASE-Anweisungen erforderlich sind. Obwohl möglicherweise mehr Einrichtung erforderlich ist, bietet es eine flexiblere und effizientere Lösung für die Pivotierung von Daten in MySQL.
Das obige ist der detaillierte Inhalt vonWie kann ich in MySQL dynamische Zeilenwerte in Spaltennamen umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!