Dynamische Spalten in Zeilen umwandeln: Erreichen der gewünschten Transformation
Einführung:
Daten aus Spalten aufheben Zeilen sind eine häufige Operation bei der Datenbearbeitung. In diesem Artikel wird untersucht, wie dynamische Spalten in Tabelle_1 transponiert werden, wobei nur Werte größer als 0 berücksichtigt werden, um die gewünschte Expected_Result_Table zu erhalten.
Die UNPIVOT-Funktion von MySQL:
MySQL stellt nativ kein UNPIVOT bereit Funktion. Allerdings können die folgenden Methoden eingesetzt werden, um das gewünschte Ergebnis zu erzielen:
Statischer spaltenbasierter Ansatz:
Für eine begrenzte Anzahl statischer Spalten können Sie eine Reihe von UNION verwenden ALL-Anweisungen zum Erstellen der transponierten Tabelle. Jede Anweisung würde bestimmte Spalten wie Wort und Menge auswählen. Dieser Ansatz eignet sich für statische Schemata mit einer bekannten Anzahl von Spalten.
Dynamischer spaltenbasierter Ansatz:
Für dynamische Schemata mit einer unbekannten Anzahl von Spalten ist ein ausgefeilterer Ansatz erforderlich. Sie können eine vorbereitete Anweisung verwenden, um dynamisches SQL zu generieren, das die Spalten schwenkt. Dabei werden die UNION ALL-Anweisungen für jede Spalte dynamisch erstellt.
Beispiel für dynamische Spalten:
Die bereitgestellte MySQL-Abfrage zeigt, wie die Spalten in Tabelle_1 mithilfe eines dynamischen Ansatzes transponiert werden:
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;
Fazit:
Durch die Verwendung des statischen oder dynamischen Ansatzes können Sie effektiv vorgehen Transponieren Sie dynamische Spalten in MySQL und berücksichtigen Sie dabei nur Werte größer als 0, um die gewünschte zeilenbasierte Struktur zu erhalten, die durch die Expected_Result_Table dargestellt wird.
Das obige ist der detaillierte Inhalt vonWie transponiere ich dynamische Spalten in Zeilen in MySQL mit Werten größer als 0?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!