Heim >Datenbank >MySQL-Tutorial >Wie entpivotiere ich dynamische Spalten in Zeilen in MySQL?
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!