logo

Pivot ja Unpivot SQL:ssä

SQL:ssä Pivot ja Unpivot ovat relaatiooperaattoreita, joita käytetään taulukon muuntamiseen toiseksi yksinkertaisemman taulukon näyttämiseksi. Perinteisesti voimme sanoa niin Pivot operaattori muuntaa taulukon rivitiedot saraketiedoiksi. The Unpivot operaattori tekee päinvastoin eli se muuttaa sarakepohjaiset tiedot riveiksi.

Syntaksi:



1. Pivot:

 SELECT (ColumnNames) FROM (TableName) PIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias) //Alias is a temporary name for a table>

2. Unpivot:

 SELECT (ColumnNames) FROM (TableName) UNPIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias)>

Esimerkki-1:
Olemme luoneet yksinkertaisen taulukon nimeltä geeksforgeeks, jossa on arvot, kuten kurssin nimi, kurssin luokka ja hinta, ja lisäsimme vastaavat arvot.



 Create Table geeksforgeeks ( CourseName nvarchar(50), CourseCategory nvarchar(50), Price int ) Insert into geeksforgeeks values('C', 'PROGRAMMING', 5000) Insert into geeksforgeeks values('JAVA', 'PROGRAMMING', 6000) Insert into geeksforgeeks values('PYTHON', 'PROGRAMMING', 8000) Insert into geeksforgeeks values('PLACEMENT 100', 'INTERVIEWPREPARATION', 5000) SELECT * FROM geeksforgeeks>

Saamamme tulos on:

Kurssin nimi Kurssiluokka Hinta
C OHJELMOINTI 5000
JAVA OHJELMOINTI 6000
PYTHON OHJELMOINTI 8000
SIJOITUS 100 HAASTATTELUN VALMISTELU 5000

Nyt hakemus PIVOT operaattori näihin tietoihin:

 SELECT CourseName, PROGRAMMING, INTERVIEWPREPARATION FROM geeksforgeeks PIVOT ( SUM(Price) FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION ) ) AS PivotTable>

Pivot-operaattorin käytön jälkeen saamme seuraavan tuloksen:



Kurssin nimi OHJELMOINTI Haastattelun valmistelu
C 5000 TYHJÄ
JAVA 6000 TYHJÄ
SIJOITUS 100 TYHJÄ 5000
PYTHON 8000 TYHJÄ

Esimerkki-2:
Nyt käytämme samaa taulukkoa geeksforgeeks, joka on luotu yllä olevassa esimerkissä, ja käytämme Unpivot-operaattoria Pivoted-taulukkoomme.

Hakeminen UNIPIVOT operaattori:

 SELECT CourseName, CourseCategory, Price FROM ( SELECT CourseName, PROGRAMMING, INTERVIEWPREPARATION FROM geeksforgeeks PIVOT ( SUM(Price) FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION) ) AS PivotTable ) P UNPIVOT ( Price FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION) ) AS UnpivotTable>

Unpivot-operaattorin käytön jälkeen saamme takaisin alkuperäisen taulukon, koska olemme onnistuneesti muuntaneet taulukon sarakkeet takaisin riveiksi:

Kurssin nimi Kurssiluokka Hinta
C OHJELMOINTI 5000
JAVA OHJELMOINTI 6000
SIJOITUS 100 HAASTATTELUN VALMISTELU 5000
PYTHON OHJELMOINTI 8000