SQL Pivot - Vet hur man konverterar rader till kolumner



Den här artikeln om SQL Pivot är en omfattande guide om hur du konverterar radnivådata till kolumndata med djupgående exempel.

Relationellt lagra enorma mängder data i form av tabeller. Dessa tabeller kan ha valfritt antal rader och kolumner. Men vad händer om du måste ändra data på radnivå till kolonndata? 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:





php konvertera objekt till array

Vad är PIVOT i SQL?

PIVOT används för att rotera tabellvärdet genom att konvertera de unika värdena för en enda kolumn till flera kolumner. Den används för att rotera raderna till kolumnvärden och kör aggregeringar när det behövs för de återstående kolumnvärdena.

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



Om vi ​​går vidare i den här artikeln, låt oss förstå syntaxen för SQL Pivot.

Syntax:

VÄLJ icke-svängbart kolumnnamn, [första svängda kolumnnamn] som kolumnnamn, [andra svängda kolumnnamn] som kolumnnamn, [tredje svängda kolumnnamn] som kolumnnamn, ... [senaste svängda kolumnnamn] som kolumnnamn FRÅN (VÄLJ fråga som producerar data) AS [alias för den ursprungliga frågan] PIVOT ([AggregationFunction] (ColumName) FOR [ColumnName of the column vars värden blir kolumnrubriker] IN ([First Pivoted ColumnName], [Second Pivoted ColumnName], [Third Pivoted ColumnName] ... [sista svängbar kolumn])) AS [alias för pivottabellen]

Här,du kan också använda BESTÄLLNING AV Klausul för att sortera värdena 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 du använder den.

Exempel

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



Leverantörstabell:

Leverantörs-ID DaysofManufacture Kosta Kundnummer KöpID
ett121230elvaP1
2tjugoett154322P2
3322. 3. 4. 5elvaP3
414876522P1
542345233P3
631543133P1
7412342elvaP2
854365422P2
9331234elvaP3
1056683233P2

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

VÄLJ kundID, AVG (kostnad) SOM genomsnittlig kostnad från kund från leverantörsgrupp efter kund-ID

Produktion:

Kundnummer AverageCostofCustomer
elva1787,75
224654
335238,33

Låt oss säga att vi vill vrida ovanstående tabell. Här blir CustomerID-kolumnvärdena kolumnrubriker.

- Skapa pivottabell med en rad och tre kolumner VÄLJ '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])) SOM Pivottabell

Produktion:

Cost_According_To_Customers elva2233
AverageCostofCustomer 1787,7546545238,33

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

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

Funktion av PIVOT-klausul

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

  • Välj kolumner för svängning
  • Välj sedan en källtabell.
  • Använd PIVOT-operatören och använd sedan aggregerade funktioner.
  • Nämn pivotvärden.

Välj kolumner för svängning

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

VÄLJ 'AverageCostofCustomer' AS Cost_According_To_Customers, [11], [22], [33]

Välj källtabell

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

(VÄLJ kundID, kostnad från leverantörer) AS källtabell

Använd PIVOT-operatören och använd sedan aggregerade funktioner

Därefter måste du ange den aggregerade funktionen som ska användas när du skapar pivottabellen. I vårt exempel har jag använt AVG-funktionen för att beräkna genomsnittskostnaden.

PIVOT (AVG (kostnad)

Nämn pivotvärden

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

FÖR KundID IN ([11], [22], [33])) Pivottabell

Så fungerar PIVOT-operatörerna. Fortsätt 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-operatören används för att utföra den motsatta operationen som den för PIVOT. Den används för att rotera kolumndata till radnivådata. Syntaxen för UNPIVOT liknar den för PIVOT. Den enda skillnaden är att du måste använda ' UNPIVOT ” .

Exempel:

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

SKAPA TABELL samplettabel (leverantörID int, AAA int, BBB int, CCC int) GO INSERT IN sampletable VALUES (1,3,5,6) INSERT INTO sampletable VALUES (2,9,2,8) INSERT INTO sampletable VALUES (3, 8,1,7) GO

Produktion:

Leverantörs-ID AAA BBB CCC
ett356
2928
38ett7

Låt oss säga att vi vill avaktivera bordet. För att göra det kan du hänvisa till följande kod:

VÄLJ leverantörsID, kunder, produkter FRÅN (VÄLJ leverantörD, AAA, BBB, CCC FRÅN sampletabell) p UNPIVOT (Produkter FÖR KUNDER I (AAA, BBB, CCC)) som exempel GO
Leverantörs-ID Kunder Produkter

ett

AAA

3

ett

BBB

5

ett

CCC

6

2

AAA

9

2

BBB

2

2

CCC

8

3

AAA

8

3

BBB

ett

ställa in java classpath i Linux

3

CCC

7

Således kan du använda SQL PIVOT och UNPIVOT. Med detta kommer vi till ett slut på den här artikeln. 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 open source-relationsdatabas och kolla in vår som kommer med instruktörsledad live-utbildning och verklig projektupplevelse. Denna utbildning hjälper dig att förstå MySQL på djupet och hjälper dig att behärska ämnet.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i denna artikel om SQL Pivot så kommer jag tillbaka till dig.