Heim >Datenbank >MySQL-Tutorial >Wie entpivotiere ich dynamische Spalten in Zeilen in MySQL?

Wie entpivotiere ich dynamische Spalten in Zeilen in MySQL?

Linda Hamilton
Linda HamiltonOriginal
2024-12-10 07:46:09844Durchsuche

How to Unpivot Dynamic Columns into Rows in MySQL?

Zeilen aus dynamischen Spalten erstellen

Im Bereich der Datenverwaltung ist häufig die Bearbeitung von Spalten und Zeilen erforderlich. Diese Frage befasst sich mit einer bestimmten Aufgabe: dem Konvertieren mehrerer dynamischer Spalten in eine neue Tabelle mit Zeilen, die bestimmte Kriterien enthalten.

Das gegebene Beispiel veranschaulicht die Aufhebung der Pivotierung von Table_1, was zu Expected_Result_Table führt. Der Hauptunterschied besteht darin, dass Expected_Result_Table jeden Wert ungleich Null in einer separaten Zeile anzeigt.

MySQL verfügt nicht über eine direkte UNPIVOT-Funktion, aber diese Einschränkung kann mit einer UNION ALL-Anweisung umgangen werden. Der grundlegende Ansatz besteht darin, für jede Spalte separate SELECT-Anweisungen zu erstellen und dabei die ID, den Spaltennamen als „Wort“-Wert und den Spaltenwert als „Mengen“-Wert auszuwählen. Diese SELECT-Anweisungen werden dann mit UNION ALL kombiniert.

Zum Beispiel:

SELECT id, 'abc' AS word, abc AS qty
FROM yt
WHERE abc > 0
UNION ALL
SELECT id, 'brt', brt
FROM yt
WHERE brt > 0

Dieser Ansatz wird komplexer, wenn es um dynamische Spalten geht. Um dieses Problem anzugehen, können vorbereitete Stellungnahmen eingesetzt werden. Sie ermöglichen die dynamische Generierung von SQL-Anweisungen basierend auf Metadaten.

Der folgende Codeausschnitt demonstriert einen solchen Ansatz:

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'select id, ''',
      c.column_name,
      ''' as word, ',
      c.column_name,
      ' as qty 
      from yt 
      where ',
      c.column_name,
      ' > 0'
    ) SEPARATOR ' UNION ALL '
  ) INTO @sql
FROM information_schema.columns c
WHERE c.table_name = 'yt'
  AND c.column_name NOT IN ('id')
ORDER BY c.ordinal_position;

SET @sql 
  = CONCAT('select id, word, qty
           from
           (', @sql, ') x  order by id');


PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

In diesem Beispiel wird das dynamische SQL mithilfe von Informationen aus erstellt information_schema.columns-Tabelle. Die vorbereitete Anweisung stmt wird dann verwendet, um das dynamisch generierte SQL auszuführen, wodurch die dynamischen Spalten effektiv in Zeilen umgewandelt werden.

Durch die Implementierung dieses Ansatzes ist es möglich, dynamische Spalten in Zeilen umzuwandeln und so auf spezifische Datenanforderungen einzugehen.

Das obige ist der detaillierte Inhalt vonWie entpivotiere ich dynamische Spalten in Zeilen in MySQL?. 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