logo

Pivotar y despivotar en SQL

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