Heim >Datenbank >MySQL-Tutorial >Wie kann man Tabellen in MySQL dynamisch Pivotieren?
In MySQL müssen Sie möglicherweise die Perspektiventabelle sehen und die Linie in Spalten umwandeln. Dies ist besonders nützlich, wenn Sie Daten in verschiedene Richtungen darstellen müssen. Obwohl MySQL selbst keine Drehfunktionen liefert, gibt es verschiedene Möglichkeiten, diese Aufgabe zu erledigen.
Herausforderung: Dynamische Perspektive Tabelle
Angenommen, Sie haben drei Tabellen: Produkttabelle, Partnertabelle und Verkaufstabelle. Sie müssen eine Tabelle erstellen, die auf Partnern, Produkten basiert und die Verkäufe für jedes Portfolio berechnet.
Eine Methode besteht darin, eine Polymerfunktion mit einer Fallanweisung zu verwenden. Durch das Erstellen mehrerer Fallanweisungen können Sie die Verkäufe jedes Produkt- und Gruppenergebnisses gemäß dem Partnernamen berechnen.
Verwenden Sie Vorbearbeitungsanweisungen, um eine dynamische Perspektive zu erhalten
<code class="language-sql">SELECT pt.partner_name, COUNT(CASE WHEN pd.product_name = 'Product A' THEN 1 END) AS ProductA, COUNT(CASE WHEN pd.product_name = 'Product B' THEN 1 END) AS ProductB, COUNT(CASE WHEN pd.product_name = 'Product C' THEN 1 END) AS ProductC, COUNT(CASE WHEN pd.product_name = 'Product D' THEN 1 END) AS ProductD, COUNT(CASE WHEN pd.product_name = 'Product E' THEN 1 END) AS ProductE FROM partners pt LEFT JOIN sales s ON pt.part_id = s.partner_id LEFT JOIN products pd ON s.product_id = pd.prod_id GROUP BY pt.partner_name;</code>Für die unbekannten und dynamischen Änderungen des Produkts können Sie eine Vorverarbeitungserklärung verwenden. Durch dynamisches Generieren von SQL -Abfragen können Sie die Anzahl der Spalten basierend auf den verfügbaren Produkten anpassen.
Einschränkungen und Vorsichtsmaßnahmen
Es ist zu beachten, dass
<code class="language-sql">SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'COUNT(CASE WHEN Product_Name = ''', Product_Name, ''' THEN 1 END) AS ', REPLACE(Product_Name, ' ', '') ) ) INTO @sql FROM products; SET @sql = CONCAT('SELECT pt.partner_name, ', @sql, ' FROM partners pt LEFT JOIN sales s ON pt.part_id = s.partner_id LEFT JOIN products pd ON s.product_id = pd.prod_id GROUP BY pt.partner_name'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;</code>die Standard -Byte -Grenze 1024 beträgt. Wenn die angeschlossene Zeichenfolge diese Grenze überschreitet, müssen Sie möglicherweise
verwenden, um die Grenze zu erhöhen.
Das obige ist der detaillierte Inhalt vonWie kann man Tabellen in MySQL dynamisch Pivotieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!