Relationelle databaser gemmer enorme mængder data i form af tabeller. Disse tabeller kan have et hvilket som helst antal rækker og kolonner. Men hvad nu hvis du skulle ændre data på rækkeniveau til kolonnedata? Nå, i denne artikel om SQL Pivot vil jeg vise dig, hvordan du kan konvertere rækker til en kolonne i en SQL Server.
Følgende emner vil blive dækket i denne artikel:
- Hvad er PIVOT i SQL?
- Syntaks
- Eksempel
- Sådan fungerer PIVOT-klausulen
- SQL UNPIVOT
Hvad er PIVOT i SQL?
PIVOT bruges til at rotere tabelværdien ved at konvertere de unikke værdier af en enkelt kolonne til flere kolonner. Den bruges til at rotere rækkerne til kolonneværdier og kører aggregeringer, når det kræves, på de resterende kolonneværdier.
UNPIVOT bruges på den anden side til at udføre de modsatte operationer. Så det bruges til at konvertere kolonnerne i en specifik tabel til kolonneværdier.
Fortsæt i denne artikel, lad os forstå syntaksen for SQL Pivot.
Syntaks:
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];
Her kan du også bruge ORDER BY-sætningen til at sortere værdierne enten i stigende eller faldende rækkefølge. Nu hvor du ved, hvad der er PIVOT i SQL og dets grundlæggende syntaks, så lad os gå videre og se, hvordan du bruger det.
Eksempler
For din bedre forståelse vil jeg overveje følgende tabel for at forklare dig alle eksemplerne.
Tabel med leverandører:
SupplierID | Fremstillingsdage | Omkostninger | Kunde-id | PurchaseID |
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 |
Lad os skrive en simpel forespørgsel for at hente de gennemsnitlige omkostninger, som hver kunde har brugt.
SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer FROM Suppliers GROUP BY CustomerID;
Output:
Kunde-id | Gennemsnitlig pris for kunde |
11 | 1787,75 |
22 | 4654 |
33 | 5238.33 |
Lad os nu sige, at vi ønsker at dreje ovenstående tabel. Her vil CustomerID-kolonneværdierne blive kolonneoverskrifterne.
-- 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;
Output:
Cost_According_To_Customers | 11 | 22 | 33 |
Gennemsnitlig pris for kunde | 1787,75 | 4654 | 5238.33 |
Bemærk: Når du bruger aggregerede funktioner med PIVOT, tages der ikke hensyn til null-værdier under beregning af en aggregering.
Det var et grundlæggende eksempel, men lad os nu forstå, hvordan PIVOT-klausulen fungerede.
PIVOT-klausul fungerer
Som du kan henvise til ovenfor, skal du følge nedenstående trin for at oprette en PIVOTTABEL:
- Vælg kolonner til pivotering
- Vælg derefter en kildetabel.
- Anvend PIVOT-operatoren, og brug derefter de samlede funktioner.
- Nævn pivotværdier.
Vælg kolonner til pivotering
I første omgang skal vi angive de felter, der skal inkluderes i vores resultater. I vores eksempel overvejede jeg kolonnen AverageCostofCustomer i pivottabellen. Derefter oprettede vi tre andre kolonner med kolonneoverskrifterne 11, 22 og 33. Eksempel-
SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]
Vælg kildetabel
Dernæst skal du angive SELECT-sætningen, som returnerer kildedataene for pivottabellen. I vores eksempel returnerer vi kunde-id og omkostninger fra tabellen Leverandører.
(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable
Anvend PIVOT-operatoren, og brug derefter de samlede funktioner
Dernæst skal du angive den aggregerede funktion, der skal bruges under oprettelse af pivottabellen. I vores eksempel har jeg brugt AVG-funktionen til at beregne den gennemsnitlige pris.
PIVOT ( AVG(Cost)
Nævn pivotværdier
Til sidst skal du nævne de værdier, som skal inkluderes i den resulterende pivottabel. Disse værdier vil blive brugt som kolonneoverskrifter i pivottabellen.
FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;
Det er sådan PIVOT-operatørerne fungerer. Gå videre i denne artikel om SQL PIVOT, lad os forstå, hvor forskellig den er fra SQL UNPIVOT.
SQL UNPIVOT
SQL UNPIVOT-operatoren bruges til at udføre den modsatte operation til PIVOT. Det bruges til at rotere kolonnedataene til data på rækkeniveau. Syntaksen for UNPIVOT ligner den for PIVOT. Den eneste forskel er, at du skal bruge SQL-søgeordet "UNPIVOT" .
Eksempel:
Lad os oprette en tabel med kolonnerne SupplierID, AAA, BBB og CCC. Indsæt også nogle få værdier.
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
Output:
SupplierID | AAA | BBB | CCC |
1 | 3 | 5 | 6 |
2 | 9 | 2 | 8 |
3 | 8 | 1 | 7 |
Lad os nu sige, at vi ønsker at fjerne pivotering af tabellen. For at gøre det, kan du henvise til følgende kode:
SELECT SupplierID, Customers, Products FROM (SELECT SupplierD, AAA, BBB, CCC FROM sampletable) p UNPIVOT (Products FOR Customers IN (AAA, BBB, CCC) )AS example; GO
SupplierID | Kunder | Produkter |
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 |
Det er sådan, du kan bruge SQL PIVOT og UNPIVOT. Med dette kommer vi til en ende på denne artikel. Jeg håber du forstod, hvordan du bruger SQL. Hvis du ønsker at lære mere om MySQL og lære denne open source relationsdatabase at kende, så tjek vores MySQL DBA certificeringsuddannelse som kommer med instruktørledet livetræning og projekterfaring i det virkelige liv. Denne træning vil hjælpe dig med at forstå MySQL i dybden og hjælpe dig med at opnå beherskelse over emnet.
Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne artikel om SQL Pivot, så vender jeg tilbage til dig.