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.