logo

Pivot og Unpivot i SQL

I SQL er Pivot og Unpivot relasjonsoperatorer som brukes til å transformere en tabell til en annen for å oppnå enklere oversikt over tabellen. Konvensjonelt kan vi si det Dreie operatoren konverterer raddataene i tabellen til kolonnedataene. De Opphev pivot Operatøren gjør det motsatte, nemlig at den transformerer kolonnebaserte data til rader.

Syntaks:

1. Pivot:



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

2. Fjern pivot:

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

Eksempel-1:
Vi har laget en enkel tabell kalt geeksforgeeks med verdier som Kursnavn, kurskategori og pris og satt inn de respektive verdiene.

 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>

Utgangen vi får er:

Kursnavn Kurskategori Pris
C PROGRAMMERING 5000
JAVA PROGRAMMERING 6000
PYTHON PROGRAMMERING 8000
PLASSERING 100 INTERVJUFORBEREDELSE 5000

Nå søker DREIE operatør til disse dataene:

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

Etter å ha brukt Pivot-operator får vi følgende resultat:

Kursnavn PROGRAMMERING Intervjuforberedelse
C 5000 NULL
JAVA 6000 NULL
PLASSERING 100 NULL 5000
PYTHON 8000 NULL

Eksempel-2:
Nå bruker vi de samme tabellgeeksforgeeksene som ble opprettet i eksemplet ovenfor og bruker Unpivot-operatoren på vår pivoterte tabell.

Søker UNPIVOT operatør:

 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>

Etter å ha brukt Unpivot-operatoren får vi den opprinnelige tabellen tilbake ettersom vi har transformert kolonnene i tabellen tilbake til rader:

Kursnavn Kurskategori Pris
C PROGRAMMERING 5000
JAVA PROGRAMMERING 6000
PLASSERING 100 INTERVJUFORBEREDELSE 5000
PYTHON PROGRAMMERING 8000