En SQL, Pivot y Unpivot son operadores relacionales que se utilizan para transformar una tabla en otra para lograr una vista más simple de la tabla. Convencionalmente podemos decir que Pivote El operador convierte los datos de las filas de la tabla en datos de la columna. El Despivotar El operador hace lo contrario: transforma los datos basados en columnas en filas.
Sintaxis:
1. Pivote:
SELECT (ColumnNames) FROM (TableName) PIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias) //Alias is a temporary name for a table>
2. Desvincular:
SELECT (ColumnNames) FROM (TableName) UNPIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias)>
Ejemplo 1:
Hemos creado una tabla simple llamada geeksforgeeks con valores como nombre del curso, categoría del curso y precio e insertamos los valores respectivos.
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 salida que obtenemos es:
| Nombre del curso | Categoría del curso | Precio |
|---|---|---|
| C | PROGRAMACIÓN | 5000 |
| JAVA | PROGRAMACIÓN | 6000 |
| PITÓN | PROGRAMACIÓN | 8000 |
| COLOCACIÓN 100 | PREPARACIÓN DE LA ENTREVISTA | 5000 |
Ahora, aplicando PIVOTE operador a estos datos:
SELECT CourseName, PROGRAMMING, INTERVIEWPREPARATION FROM geeksforgeeks PIVOT ( SUM(Price) FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION ) ) AS PivotTable>
Después de usar el operador Pivot obtenemos el siguiente resultado:
| Nombre del curso | PROGRAMACIÓN | Preparación de la entrevista |
|---|---|---|
| C | 5000 | NULO |
| JAVA | 6000 | NULO |
| COLOCACIÓN 100 | NULO | 5000 |
| PITÓN | 8000 | NULO |
Ejemplo-2:
Ahora, usamos la misma tabla geeksforgeeks creada en el ejemplo anterior y aplicamos el operador Unpivot a nuestra tabla dinámica.
Aplicando DESPIVOTAR 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>
Después de usar el operador Unpivot, recuperamos nuestra tabla original, ya que hemos transformado con éxito las columnas de la tabla en filas:
| Nombre del curso | Categoría del curso | Precio |
|---|---|---|
| C | PROGRAMACIÓN | 5000 |
| JAVA | PROGRAMACIÓN | 6000 |
| COLOCACIÓN 100 | PREPARACIÓN DE LA ENTREVISTA | 5000 |
| PITÓN | PROGRAMACIÓN | 8000 |