Relationale Datenbanken speichern riesige Datenmengen in Form von Tabellen. Diese Tabellen können beliebig viele Zeilen und Spalten haben. Aber was wäre, wenn Sie die Daten auf Zeilenebene in Spaltendaten ändern müssten? Nun, in diesem Artikel über SQL Pivot zeige ich Ihnen, wie Sie in einem SQL Server Zeilen in eine Spalte umwandeln können.
Die folgenden Themen werden in diesem Artikel behandelt:
- Was ist PIVOT in SQL?
- Syntax
- Beispiel
- Funktion der PIVOT-Klausel
- SQL-UNPIVOT
Was ist PIVOT in SQL?
PIVOT wird verwendet, um den Tabellenwert zu rotieren, indem die eindeutigen Werte einer einzelnen Spalte in mehrere Spalten umgewandelt werden. Es wird verwendet, um die Zeilen in Spaltenwerte umzuwandeln, und führt bei Bedarf Aggregationen für die verbleibenden Spaltenwerte durch.
UNPIVOT hingegen wird verwendet, um die entgegengesetzten Operationen auszuführen. Es wird also verwendet, um die Spalten einer bestimmten Tabelle in Spaltenwerte umzuwandeln.
Lassen Sie uns in diesem Artikel fortfahren und die Syntax von SQL Pivot verstehen.
Syntax:
SELECT NonPivoted ColumnName, [First Pivoted ColumnName] AS ColumnName, [Second Pivoted ColumnName] AS ColumnName, [Third Pivoted ColumnName] AS ColumnName, ... [Last Pivoted ColumnName] AS ColumnName FROM (SELECT query which produces the data) AS [alias for the initial query] PIVOT ( [AggregationFunction](ColumName) FOR [ColumnName of the column whose values will become column headers] IN ( [First Pivoted ColumnName], [Second Pivoted ColumnName], [Third Pivoted ColumnName] ... [last pivoted column]) ) AS [alias for the Pivot Table];
Hier können Sie auch die ORDER BY-Klausel verwenden, um die Werte entweder in aufsteigender oder absteigender Reihenfolge zu sortieren. Nachdem Sie nun wissen, was PIVOT in SQL und seine grundlegende Syntax ist, lassen Sie uns weitermachen und sehen, wie es verwendet wird.
Beispiele
Für Ihr besseres Verständnis werde ich die folgende Tabelle betrachten, um Ihnen alle Beispiele zu erklären.
Lieferantentabelle:
SupplierID | Herstellungstage | Kosten | Kundennummer | Kauf-ID |
1 | 12 | 1230 | 11 | P1 |
2 | 21 | 1543 | 22 | P2 |
3 | 32 | 2345 | 11 | P3 |
4 | 14 | 8765 | 22 | P1 |
5 | 42 | 3452 | 33 | P3 |
6 | 31 | 5431 | 33 | P1 |
7 | 41 | 2342 | 11 | P2 |
8 | 54 | 3654 | 22 | P2 |
9 | 33 | 1234 | 11 | P3 |
10 | 56 | 6832 | 33 | P2 |
Lassen Sie uns eine einfache Abfrage schreiben, um die durchschnittlichen Kosten abzurufen, die von jedem Kunden ausgegeben werden.
SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer FROM Suppliers GROUP BY CustomerID;
Ausgabe:
Kundennummer | Durchschnittliche Kosten des Kunden |
11 | 1787,75 |
22 | 4654 |
33 | 5238.33 |
Nehmen wir nun an, wir wollen die obige Tabelle schwenken. Hier werden die Werte der CustomerID-Spalte zu Spaltenüberschriften.
-- Create Pivot table with one row and three columns SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33] FROM (SELECT CustomerID, Cost FROM Suppliers) AS SourceTable PIVOT ( AVG(Cost) FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Ausgabe:
Cost_According_To_Customers | 11 | 22 | 33 |
Durchschnittliche Kosten des Kunden | 1787,75 | 4654 | 5238,33 |
Hinweis: Wenn Sie Aggregatfunktionen mit PIVOT verwenden, werden Nullwerte beim Berechnen einer Aggregation nicht berücksichtigt.
Nun, das war ein einfaches Beispiel, aber lassen Sie uns jetzt verstehen, wie die PIVOT-Klausel funktioniert hat.
Funktion der PIVOT-Klausel
Wie Sie oben verweisen können, müssen Sie zum Erstellen einer PIVOT-TABELLE die folgenden Schritte befolgen:
- Spalten zum Pivotieren auswählen
- Wählen Sie dann eine Quelltabelle aus.
- Wenden Sie den PIVOT-Operator an und verwenden Sie dann die Aggregatfunktionen.
- Pivot-Werte erwähnen.
Spalten zum Pivotieren auswählen
Zunächst müssen wir die Felder spezifizieren, die in unseren Ergebnissen enthalten sein sollen. In unserem Beispiel habe ich die Spalte AverageCostofCustomer in der Pivot-Tabelle betrachtet. Dann haben wir drei weitere Spalten mit den Spaltenüberschriften 11, 22 und 33 erstellt. Beispiel-
SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]
Quelltabelle auswählen
Als nächstes müssen Sie die SELECT-Anweisung angeben, die die Quelldaten für die Pivot-Tabelle zurückgibt. In unserem Beispiel geben wir die CustomerID und Cost aus der Suppliers-Tabelle zurück.
(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable
Wenden Sie den PIVOT-Operator an und verwenden Sie dann die Aggregatfunktionen
Als nächstes müssen Sie die Aggregatfunktion angeben, die beim Erstellen der Pivot-Tabelle verwendet werden soll. In unserem Beispiel habe ich die AVG-Funktion verwendet, um die Durchschnittskosten zu berechnen.
PIVOT ( AVG(Cost)
Pivot-Werte erwähnen
Schließlich müssen Sie die Werte nennen, die in die resultierende Pivot-Tabelle aufgenommen werden müssen. Diese Werte werden als Spaltenüberschriften in der Pivot-Tabelle verwendet.
FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
So funktionieren die PIVOT-Operatoren. Fahren Sie mit diesem Artikel über SQL PIVOT fort und lassen Sie uns verstehen, wie es sich von SQL UNPIVOT unterscheidet.
SQL-UNPIVOT
Der SQL UNPIVOT-Operator wird verwendet, um die entgegengesetzte Operation zu der von PIVOT auszuführen. Es wird verwendet, um die Spaltendaten in Daten auf Zeilenebene zu rotieren. Die Syntax von UNPIVOT ähnelt der von PIVOT. Der einzige Unterschied besteht darin, dass Sie das SQL-Schlüsselwort „UNPIVOT“ verwenden müssen .
Beispiel:
Lassen Sie uns eine Tabelle mit den Spalten SupplierID, AAA, BBB und CCC erstellen. Fügen Sie außerdem einige Werte ein.
CREATE TABLE sampletable (SupplierID int, AAA int, BBB int, CCC int); GO INSERT INTO sampletable VALUES (1,3,5,6); INSERT INTO sampletable VALUES (2,9,2,8); INSERT INTO sampletable VALUES (3,8,1,7); GO
Ausgabe:
SupplierID | AAA | BBB | CCC |
1 | 3 | 5 | 6 |
2 | 9 | 2 | 8 |
3 | 8 | 1 | 7 |
Nehmen wir nun an, wir wollen die Tabelle entpivotieren. Dazu können Sie auf den folgenden Code verweisen:
SELECT SupplierID, Customers, Products FROM (SELECT SupplierD, AAA, BBB, CCC FROM sampletable) p UNPIVOT (Products FOR Customers IN (AAA, BBB, CCC) )AS example; GO
Lieferanten-ID | Kunden | Produkte |
1 | AAA | 3 |
1 | BBB | 5 |
1 | CCC | 6 |
2 | AAA | 9 |
2 | BBB | 2 |
2 | CCC | 8 |
3 | AAA | 8 |
3 | BBB | 1 |
3 | CCC | 7 |
So können Sie SQL PIVOT und UNPIVOT verwenden. Damit beenden wir diesen Artikel. Ich hoffe, Sie haben verstanden, wie man SQL verwendet. Wenn Sie mehr über MySQL erfahren und diese relationale Open-Source-Datenbank kennenlernen möchten, sehen Sie sich unsere MySQL-DBA-Zertifizierungsschulung an Dazu gehören von einem Kursleiter geleitete Live-Schulungen und reale Projekterfahrung. Dieses Training wird Ihnen helfen, MySQL gründlich zu verstehen und das Thema zu beherrschen.
Haben Sie eine Frage an uns? Bitte erwähnen Sie es im Kommentarbereich dieses Artikels zu SQL Pivot und ich werde mich bei Ihnen melden.