Dynamischer Pivot in MySQL
In MySQL enthalten Tabellen oft Daten in einem normalisierten Format, was komplexe Abfragen erfordert, um Daten in einem benutzerfreundlicheren Format abzurufen -freundliches Format. Eine solche Transformation ist die Pivotierung, bei der Spalten in Zeilen umgewandelt werden.
Stellen Sie sich eine Tabelle wie „Teile“ vor, die Produktteile (part_id) mit Produkttypen (part_type) und Produkt-IDs (product_id) in Beziehung setzt. Wir möchten diese Tabelle drehen, um eine neue Tabelle zu erstellen, die die Teile-IDs jedes Produkts für verschiedene Teiletypen anzeigt.
MySQL verfügt nicht über eine dedizierte PIVOT-Funktion, daher müssen wir alternative Techniken verwenden. Eine Lösung besteht darin, Aggregatfunktionen und CASE-Anweisungen zu verwenden. Für die dynamische Pivotierung können wir vorbereitete Anweisungen nutzen.
Dynamische Pivot-Abfrage
Die folgende Abfrage verwendet dynamisches SQL, um die Tabelle „Teile“ zu Pivotieren:
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'max(case when part_type = ''', part_type, ''' then part_id end) AS part_', part_type, '_id' ) ) INTO @sql FROM parts; SET @sql = CONCAT('SELECT product_id, ', @sql, ' FROM parts GROUP BY product_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
Diese Abfrage generiert dynamisch eine SQL-Anweisung basierend auf den in der Tabelle vorhandenen unterschiedlichen Teiltypen und führt sie zur Verbesserung mithilfe vorbereiteter Anweisungen aus Leistung.
Beispielergebnis
Die resultierende Tabelle hat das folgende Format:
product_id part_A_id part_B_id ---------------------------------------- 1 1 2 2 3 4 3 5 6
Statische Pivot-Abfrage
Für eine begrenzte Anzahl von Teiletypen kann eine statische Pivot-Abfrage erfolgen verwendet:
select product_id, max(case when part_type ='A' then part_id end) as Part_A_Id, max(case when part_type ='B' then part_id end) as Part_B_Id from parts group by product_id
Diese Abfrage gibt die Teiletypen manuell an und generiert die Pivot-Tabelle.
Das obige ist der detaillierte Inhalt vonWie führe ich dynamisches Pivotieren in MySQL mithilfe vorbereiteter Anweisungen durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!