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