logo

Pivot og Unpivot i SQL

I SQL er Pivot og Unpivot relationelle operatorer, der bruges til at transformere en tabel til en anden for at opnå en mere enkel visning af tabellen. Konventionelt kan vi sige det Omdrejningspunkt operatoren konverterer rækkedataene i tabellen til kolonnedataene. Det Fjern pivot operatoren gør det modsatte, nemlig at den transformerer de kolonnebaserede data til rækker.

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 lavet en simpel tabel ved navn geeksforgeeks med værdier som Kursusnavn, kursuskategori og pris og indsat de respektive værdier.



 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>

Det output vi får er:

Kursusnavn Kursuskategori Pris
C PROGRAMMERING 5000
JAVA PROGRAMMERING 6000
PYTHON PROGRAMMERING 8000
PLACERING 100 FORBEREDELSE AF INTERVIEW 5000

Nu ansøger OMDREJNINGSPUNKT operatør til disse data:

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

Efter brug af Pivot-operator får vi følgende resultat:



Kursusnavn PROGRAMMERING Interviewforberedelse
C 5000 NUL
JAVA 6000 NUL
PLACERING 100 NUL 5000
PYTHON 8000 NUL

Eksempel-2:
Nu bruger vi de samme tabel-nørder, der er oprettet i ovenstående eksempel, og anvender Unpivot-operatoren på vores pivoterede tabel.

Ansøger 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>

Efter at have brugt Unpivot-operatoren får vi vores oprindelige tabel tilbage, da vi med succes har transformeret tabellens kolonner tilbage til rækker:

Kursusnavn Kursuskategori Pris
C PROGRAMMERING 5000
JAVA PROGRAMMERING 6000
PLACERING 100 FORBEREDELSE AF INTERVIEW 5000
PYTHON PROGRAMMERING 8000