Heim >Datenbank >MySQL-Tutorial >Wie kann ich in MySQL dynamische Zeilenwerte in Spaltennamen umwandeln?

Wie kann ich in MySQL dynamische Zeilenwerte in Spaltennamen umwandeln?

Barbara Streisand
Barbara StreisandOriginal
2025-01-13 19:52:44579Durchsuche

How to Pivot Dynamic Row Values into Column Names in MySQL?

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!

Stellungnahme:
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