sql >> Database teknologi >  >> RDS >> Database

SQL Pivot - Ved, hvordan man konverterer rækker til kolonner

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.


  1. Gendan en kopi af din database

  2. Undgå selvbedrag af HA/DR-løsning

  3. Ydeevnegrænser for logiske replikeringsløsninger

  4. Sådan erstattes null-værdier med ukendt i Select Statement i SQL Server - SQL Server / TSQL Tutorial Del 111