logo

Pivot och Unpivot i SQL

I SQL är Pivot och Unpivot relationsoperatorer som används för att omvandla en tabell till en annan för att få en enklare bild av tabellen. Konventionellt kan vi säga det Svänga operatorn konverterar raddata i tabellen till kolumndata. De Ta bort pivot operatorn gör motsatsen, det vill säga att den omvandlar kolumnbaserade data till rader.

Syntax:



1. Pivot:

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

2. Ta bort pivot:

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

Exempel-1:
Vi har skapat en enkel tabell med namnet geeksforgeeks med värden som Kursnamn, kurskategori och pris och infogat respektive värden.



 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>

Utgången vi får är:

Kursnamn Kurskategori Pris
C PROGRAMMERING 5 000
JAVA PROGRAMMERING 6000
PYTONORM PROGRAMMERING 8000
PLACERING 100 INTERVJUFÖRBEREDELSE 5 000

Nu ansöker SVÄNGA operatör till denna data:

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

Efter att ha använt Pivot-operatorn får vi följande resultat:



Kursnamn PROGRAMMERING Intervjuförberedelse
C 5 000 NULL
JAVA 6000 NULL
PLACERING 100 NULL 5 000
PYTONORM 8000 NULL

Exempel-2:
Nu använder vi samma tabellgeeksforgeeks som skapades i exemplet ovan och tillämpar Unpivot-operatorn på vår pivoterade tabell.

Ansö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>

Efter att ha använt Unpivot-operatorn får vi tillbaka vår ursprungliga tabell eftersom vi framgångsrikt har transformerat tabellens kolumner tillbaka till rader:

Kursnamn Kurskategori Pris
C PROGRAMMERING 5 000
JAVA PROGRAMMERING 6000
PLACERING 100 INTERVJUFÖRBEREDELSE 5 000
PYTONORM PROGRAMMERING 8000