En SQL, Pivot i Unpivot són operadors relacionals que s'utilitzen per transformar una taula en una altra per tal d'aconseguir una vista més senzilla de la taula. Convencionalment ho podem dir Pivot L'operador converteix les dades de les files de la taula en les dades de la columna. El Unpivot L'operador fa el contrari que és transformar les dades basades en columnes en files.
Sintaxi:
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)>
Exemple-1:
Hem creat una taula senzilla anomenada geeksforgeeks amb valors com el nom del curs, la categoria del curs i el preu i hem inserit els valors respectius.
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> La sortida que obtenim és:
| Nom del curs | Categoria del curs | Preu |
|---|---|---|
| C | PROGRAMACIÓ | 5000 |
| JAVA | PROGRAMACIÓ | 6000 |
| PITÓ | PROGRAMACIÓ | 8000 |
| LLOC 100 | PREPARACIÓ DE L'ENTREVISTA | 5000 |
Ara, sol·licitant PIVOT operador a aquestes dades:
SELECT CourseName, PROGRAMMING, INTERVIEWPREPARATION FROM geeksforgeeks PIVOT ( SUM(Price) FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION ) ) AS PivotTable>
Després d'utilitzar l'operador Pivot, obtenim el següent resultat:
| Nom del curs | PROGRAMACIÓ | Preparació de l'entrevista |
|---|---|---|
| C | 5000 | NUL |
| JAVA | 6000 | NUL |
| LLOC 100 | NUL | 5000 |
| PITÓ | 8000 | NUL |
Exemple-2:
Ara, utilitzem la mateixa taula geeksforgeeks creada a l'exemple anterior i apliquem l'operador Unpivot a la nostra taula pivotada.
Aplicant UNPIVOT operador:
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>
Després d'utilitzar l'operador Unpivot, recuperem la nostra taula original ja que hem transformat correctament les columnes de la taula a files:
| Nom del curs | Categoria del curs | Preu |
|---|---|---|
| C | PROGRAMACIÓ | 5000 |
| JAVA | PROGRAMACIÓ | 6000 |
| LLOC 100 | PREPARACIÓ DE L'ENTREVISTA | 5000 |
| PITÓ | PROGRAMACIÓ | 8000 |