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 el operador Pivot convierte los datos de las filas de la tabla en los datos de la columna. El operador Unpivot hace lo contrario, es decir, 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. Despivote:
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 | CursoCategoría | 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 el operador PIVOT 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 | EntrevistaPreparación |
---|---|---|
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 Pivotada.
Aplicando el operador UNPIVOT :
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 | CursoCategoría | Precio |
---|---|---|
C | PROGRAMACIÓN | 5000 |
JAVA | PROGRAMACIÓN | 6000 |
COLOCACIÓN 100 | PREPARACIÓN DE LA ENTREVISTA | 5000 |
PITÓN | PROGRAMACIÓN | 8000 |