sql >> Databasteknik >  >> RDS >> Database

SQL Pivot – Vet hur man konverterar rader till kolumner

Relationsdatabaser lagrar enorma mängder data i form av tabeller. Dessa tabeller kan ha valfritt antal rader och kolumner. Men vad händer om du var tvungen att ändra data på radnivå till kolumnära data? Tja, i den här artikeln om SQL Pivot kommer jag att visa dig hur du kan konvertera rader till en kolumn i en SQL Server.

Följande ämnen kommer att behandlas i den här artikeln:

  • Vad är PIVOT i SQL?
  • Syntax
  • Exempel
  • Fungerar med PIVOT-klausul
  • SQL UNPIVOT

Vad är PIVOT i SQL?

PIVOT används för att rotera tabellvärdet genom att konvertera de unika värdena för en enskild kolumn till flera kolumner. Den används för att rotera raderna till kolumnvärden och kör aggregering vid behov på de återstående kolumnvärdena.

UNPIVOT, å andra sidan, används för att utföra motsatta operationer. Så den används för att konvertera kolumnerna i en specifik tabell till kolumnvärden.

Vi går vidare i den här artikeln och låt oss förstå syntaxen för SQL Pivot.

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];

Här kan du också använda ORDER BY-satsen för att sortera värdena antingen i stigande eller fallande ordning. Nu när du vet vad som är PIVOT i SQL och dess grundläggande syntax, låt oss gå vidare och se hur man använder det.

Exempel

För din bättre förståelse kommer jag att överväga följande tabell för att förklara alla exempel.

Leverantörstabell:

Leverantörs-ID DaysofManufacture Kostnad Kund-ID Köp-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

Låt oss skriva en enkel fråga för att få fram den genomsnittliga kostnaden för varje kund.

SELECT CustomerID, AVG(Cost) AS AverageCostofCustomer   
FROM Suppliers  
GROUP BY CustomerID;  

Utdata:

Kund-ID Genomsnittlig kostnad för kund
11 1787,75
22 4654
33 5238.33

Låt oss nu säga att vi vill pivotera tabellen ovan. Här kommer kund-ID-kolumnvärdena att bli kolumnrubriker.


-- 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;

Utdata:

Cost_According_To_Customers 11 22 33
Genomsnittlig kostnad för kund 1787,75 4654 5238.33

Obs! När du använder aggregerade funktioner med PIVOT, beaktas inte nollvärden vid beräkning av en aggregering.

Tja, det var ett grundläggande exempel, men låt oss nu förstå hur PIVOT-klausulen fungerade.

Fungerar med PIVOT-klausulen

Som du kan hänvisa till ovan, för att skapa en PIVOTTABELL, måste du följa stegen nedan:

  • Välj kolumner för pivotering
  • Välj sedan en källtabell.
  • Använd PIVOT-operatorn och använd sedan aggregatfunktionerna.
  • Nämn pivotvärden.

Välj kolumner för pivotering

Inledningsvis måste vi ange vilka fält som ska inkluderas i våra resultat. I vårt exempel betraktade jag kolumnen AverageCostofCustomer i pivottabellen. Sedan skapade vi tre andra kolumner med kolumnrubrikerna 11, 22 och 33. Exempel-

SELECT 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]

Välj källtabell

Närnäst måste du specificera SELECT-satsen som returnerar källdata för pivottabellen. I vårt exempel returnerar vi kund-ID och kostnad från tabellen Leverantörer.

(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable

Använd PIVOT-operatorn och använd sedan aggregatfunktionerna

Närnäst måste du specificera aggregatfunktionen som ska användas när du skapar pivottabellen. I vårt exempel har jag använt AVG-funktionen för att beräkna den genomsnittliga kostnaden.

PIVOT ( AVG(Cost)

Nämn pivotvärden

Slutligen måste du nämna de värden som måste inkluderas i den resulterande pivottabellen. Dessa värden kommer att användas som kolumnrubriker i pivottabellen.

FOR CustomerID IN ([11], [22], [33]) ) AS PivotTable;

Det är så PIVOT-operatorerna fungerar. Gå vidare i den här artikeln om SQL PIVOT, låt oss förstå hur annorlunda det är från SQL UNPIVOT.

SQL UNPIVOT

SQL UNPIVOT-operatorn används för att utföra den motsatta operationen till PIVOT. Den används för att rotera kolumndata till data på radnivå. Syntaxen för UNPIVOT liknar den för PIVOT. Den enda skillnaden är att du måste använda SQL-nyckelordet "UNPIVOT" .

Exempel:

Låt oss skapa en tabell med kolumnerna SupplierID, AAA, BBB och CCC. Infoga också några värden.

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  

Utdata:

Leverantörs-ID AAA BBB CCC
1 3 5 6
2 9 2 8
3 8 1 7

Nu, låt oss säga, vill vi avpivotera tabellen. För att göra det kan du hänvisa till följande kod:

SELECT SupplierID, Customers, Products
FROM
(SELECT SupplierD, AAA, BBB, CCC
FROM sampletable) p
UNPIVOT
(Products FOR Customers IN
(AAA, BBB, CCC)
)AS example;
GO
Leverantörs-ID 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 är så du kan använda SQL PIVOT och UNPIVOT. Med detta kommer vi till ett slut på denna artikel. Jag hoppas att du förstod hur man använder SQL. Om du vill lära dig mer om MySQL och lära känna denna relationsdatabas med öppen källkod, kolla in vår MySQL DBA-certifieringsutbildning som kommer med instruktörsledd liveutbildning och verklig projektupplevelse. Den här utbildningen hjälper dig att förstå MySQL på djupet och hjälper dig att behärska ämnet.

Har du en fråga till oss? Nämn det i kommentarsfältet i den här artikeln om SQL Pivot så återkommer jag till dig.


  1. Distribuera ett mycket tillgängligt Nextcloud med MySQL Galera Cluster och GlusterFS

  2. Ta bort spårfiler med ADRCI

  3. MariaDB – MySQL – Visa motorer för att visa alla tillgängliga och stödda motorer

  4. Hur man infogar och tar bort data i PostgreSQL