sql >> Database >  >> RDS >> Database

SQL Pivot - Weet hoe u rijen naar kolommen converteert

Relationele databases slaan gigantische hoeveelheden gegevens op in de vorm van tabellen. Deze tabellen kunnen een willekeurig aantal rijen en kolommen hebben. Maar wat als u de gegevens op rijniveau moet wijzigen in kolomgegevens? Welnu, in dit artikel over SQL Pivot laat ik je zien hoe je rijen kunt converteren naar een kolom in een SQL Server.

De volgende onderwerpen komen in dit artikel aan bod:

  • Wat is PIVOT in SQL?
  • Syntaxis
  • Voorbeeld
  • Werking van de PIVOT-clausule
  • SQL-UNPIVOT

Wat is PIVOT in SQL?

PIVOT wordt gebruikt om de tabelwaarde te roteren door de unieke waarden van een enkele kolom naar meerdere kolommen te converteren. Het wordt gebruikt om de rijen naar kolomwaarden te roteren en indien nodig aggregaties uit te voeren op de resterende kolomwaarden.

UNPIVOT daarentegen wordt gebruikt om de tegenovergestelde bewerkingen uit te voeren. Het wordt dus gebruikt om de kolommen van een specifieke tabel om te zetten in kolomwaarden.

Laten we verder gaan met dit artikel en de syntaxis van SQL Pivot begrijpen.

Syntaxis:

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

Hier kunt u ook de ORDER BY-component gebruiken om de waarden in oplopende of aflopende volgorde te sorteren. Nu u weet wat PIVOT is in SQL en wat de basissyntaxis is, gaan we verder en kijken hoe we het kunnen gebruiken.

Voorbeelden

Voor een beter begrip zal ik de volgende tabel overwegen om u alle voorbeelden uit te leggen.

Leverancierstabel:

Leverancier-ID DaysofManufacture Kosten Klant-ID Aankoop-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

Laten we een eenvoudige zoekopdracht schrijven om de gemiddelde kosten van elke klant te achterhalen.

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

Uitvoer:

Klant-ID GemiddeldeKoststofKlant
11 1787,75
22 4654
33 5238.33

Laten we nu zeggen dat we de bovenstaande tabel willen draaien. Hier worden de kolomwaarden van de Klant-ID de kolomkoppen.


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

Uitvoer:

Cost_According_To_Customers 11 22 33
Gemiddelde kosten klant 1787,75 4654 5238.33

Opmerking: Wanneer u aggregatiefuncties gebruikt met PIVOT, wordt er geen rekening gehouden met null-waarden bij het berekenen van een aggregatie.

Nou, dat was een eenvoudig voorbeeld, maar laten we nu begrijpen hoe de PIVOT-clausule werkte.

Werking van de PIVOT-clausule

Zoals je hierboven kunt zien, moet je de onderstaande stappen volgen om een ​​PIVOT TABLE te maken:

  • Kolommen selecteren om te draaien
  • Selecteer vervolgens een brontabel.
  • Pas de PIVOT-operator toe en gebruik vervolgens de aggregatiefuncties.
  • Vermeld spilwaarden.

Kolommen selecteren om te draaien

Aanvankelijk moeten we de velden specificeren die in onze resultaten moeten worden opgenomen. In ons voorbeeld heb ik de kolom AverageCostofCustomer in de draaitabel overwogen. Vervolgens hebben we drie andere kolommen gemaakt met de kolomkoppen 11, 22 en 33. Voorbeeld-

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

Selecteer brontabel

Vervolgens moet je de SELECT-instructie specificeren die de brongegevens voor de draaitabel zal retourneren. In ons voorbeeld geven we de klant-ID en kosten terug uit de tabel Leveranciers.

(SELECT CustomerID, Cost FROM Suppliers) AS SourceTable

Pas de PIVOT-operator toe en gebruik vervolgens de aggregatiefuncties

Vervolgens moet u de aggregatiefunctie specificeren die moet worden gebruikt bij het maken van de draaitabel. In ons voorbeeld heb ik de AVG-functie gebruikt om de gemiddelde kosten te berekenen.

PIVOT ( AVG(Cost)

Spilwaarden vermelden

Ten slotte moet u de waarden vermelden die in de resulterende draaitabel moeten worden opgenomen. Deze waarden worden gebruikt als de kolomkoppen in de draaitabel.

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

Zo werken de PIVOT-operators. We gaan verder in dit artikel over SQL PIVOT en laten ons begrijpen hoe anders het is dan SQL UNPIVOT.

SQL-UNPIVOT

De SQL UNPIVOT-operator wordt gebruikt om de bewerking tegengesteld aan die van PIVOT uit te voeren. Het wordt gebruikt om de kolomgegevens te roteren naar gegevens op rijniveau. De syntaxis van UNPIVOT is vergelijkbaar met die van PIVOT. Het enige verschil is dat u het SQL-sleutelwoord "UNPIVOT" . moet gebruiken .

Voorbeeld:

Laten we een tabel maken met de kolommen SupplierID, AAA, BBB en CCC. Voeg ook enkele waarden in.

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  

Uitvoer:

Leverancier-ID AAA BBB CCC
1 3 5 6
2 9 2 8
3 8 1 7

Laten we zeggen dat we de draaiing van de tabel ongedaan willen maken. Om dat te doen, kunt u de volgende code raadplegen:

SELECT SupplierID, Customers, Products
FROM
(SELECT SupplierD, AAA, BBB, CCC
FROM sampletable) p
UNPIVOT
(Products FOR Customers IN
(AAA, BBB, CCC)
)AS example;
GO
Leverancier-ID Klanten Producten

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

Zo kun je de SQL PIVOT en UNPIVOT gebruiken. Hiermee komen we tot een einde aan dit artikel. Ik hoop dat je begrijpt hoe je SQL moet gebruiken. Als je meer wilt weten over MySQL en deze open-source relationele database wilt leren kennen, bekijk dan onze MySQL DBA-certificeringstraining die wordt geleverd met een door een instructeur geleide live training en real-life projectervaring. Deze training zal u helpen MySQL diepgaand te begrijpen en u te helpen het onderwerp onder de knie te krijgen.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte van dit artikel over SQL Pivot en ik neem contact met je op.


  1. Een PostgreSQL-database maken

  2. JPA SQL Server Geen Dialect-toewijzing voor JDBC-type:-9

  3. Hoe een geparametriseerde Oracle Insert-query te schrijven?

  4. PostgreSQL-beveiliging standaardiseren in multi-cloudomgevingen