logo

Pivot și Unpivot în SQL

În SQL, Pivot și Unpivot sunt operatori relaționali care sunt utilizați pentru a transforma un tabel în altul pentru a obține o vizualizare mai simplă a tabelului. În mod convențional putem spune că Pivot operatorul convertește datele de rând ale tabelului în datele de coloană. The Unpivot operatorul face opusul, adică transformă datele bazate pe coloană în rânduri.

Sintaxă:

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

Exemplul-1:
Am creat un tabel simplu numit geeksforgeeks cu valori precum Numele cursului, categoria cursului și prețul și am inserat valorile respective.

 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>

Ieșirea pe care o obținem este:

Numele cursului Categoria cursului Preț
C PROGRAMARE 5000
JAVA PROGRAMARE 6000
PITON PROGRAMARE 8000
LOCUL 100 PREGĂTIREA INTERVIULUI 5000

Acum, aplică PIVOT operator la aceste date:

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

După folosirea operatorului Pivot obținem următorul rezultat:

Numele cursului PROGRAMARE Pregătirea interviului
C 5000 NUL
JAVA 6000 NUL
LOCUL 100 NUL 5000
PITON 8000 NUL

Exemplul-2:
Acum, folosim același tabel Geeksforgeeks creat în exemplul de mai sus și aplicăm operatorul Unpivot la tabelul nostru Pivot.

Punerea în aplicare UNPIVOT operator:

 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>

După ce folosim operatorul Unpivot, obținem tabelul inițial înapoi, deoarece am transformat cu succes coloanele tabelului înapoi în rânduri:

Numele cursului Categoria cursului Preț
C PROGRAMARE 5000
JAVA PROGRAMARE 6000
LOCUL 100 PREGĂTIREA INTERVIULUI 5000
PITON PROGRAMARE 8000