Explicación de la Función Pivot en SQL Server

Aunque ya habíamos realizado un post donde hablamos de la función Pivot como herramienta para crear tablas de referencias cruzadas, esta vez hemos creado e incluido un video con la explicación del tema.

Ejemplo1

Las instrucciones PIVOT y UNPIVOT en SQL Server se utilizan para transformar datos en una tabla, facilitando su análisis y visualización. Aquí te explico cada una en detalle.

Instrucción PIVOT

PIVOT transforma datos de un formato de filas a un formato de columnas, esencialmente rotando una tabla. Esto es útil cuando deseas resumir datos y verlos en un formato de tabla cruzada.

Ejemplo de PIVOT

Supongamos que tienes una tabla de ventas con las siguientes columnas: Vendedor, Producto y CantidadVendida.

CREATE TABLE Ventas (
Vendedor NVARCHAR(50),
Producto NVARCHAR(50),
CantidadVendida INT
);

INSERT INTO Ventas (Vendedor, Producto, CantidadVendida) VALUES
(‘Ana’, ‘Producto1’, 5),
(‘Ana’, ‘Producto2’, 3),
(‘Luis’, ‘Producto1’, 7),
(‘Luis’, ‘Producto3’, 6),
(‘Marta’, ‘Producto2’, 4),
(‘Marta’, ‘Producto3’, 8);

Queremos ver las ventas por producto para cada vendedor, con los productos como columnas:

SELECT Vendedor, Producto1, Producto2, Producto3
FROM (
SELECT Vendedor, Producto, CantidadVendida
FROM Ventas
) AS SourceTable
PIVOT (
SUM(CantidadVendida)
FOR Producto IN (Producto1, Producto2, Producto3)
) AS PivotTable;

Explicación:

  1. Subconsulta: Selecciona los datos originales.
  2. PIVOT: Suma (SUM) la CantidadVendida y rota las filas, creando nuevas columnas para cada valor único en Producto.

El resultado será:

Vendedor Producto1 Producto2 Producto3
Ana 5 3 NULL
Luis 7 NULL 6
Marta NULL 4 8

Instrucción UNPIVOT

UNPIVOT realiza la operación inversa de PIVOT, transformando datos de un formato de columnas a un formato de filas. Esto es útil cuando necesitas normalizar datos previamente pivotados.

Ejemplo de UNPIVOT

Supongamos que tienes la tabla pivotada anterior y quieres convertirla de nuevo a su forma original:

CREATE TABLE VentasPivot (
Vendedor NVARCHAR(50),
Producto1 INT,
Producto2 INT,
Producto3 INT
);

INSERT INTO VentasPivot (Vendedor, Producto1, Producto2, Producto3) VALUES
(‘Ana’, 5, 3, NULL),
(‘Luis’, 7, NULL, 6),
(‘Marta’, NULL, 4, 8);

Usamos UNPIVOT para transformar las columnas de productos de nuevo a filas:

SELECT Vendedor, Producto, CantidadVendida
FROM (
SELECT Vendedor, Producto1, Producto2, Producto3
FROM VentasPivot
) AS PivotTable
UNPIVOT (
CantidadVendida FOR Producto IN (Producto1, Producto2, Producto3)
) AS UnpivotTable;

Explicación:

  1. Subconsulta: Selecciona los datos pivotados.
  2. UNPIVOT: Transforma las columnas de productos (Producto1, Producto2, Producto3) en filas, con CantidadVendida asignado a cada producto correspondiente.

El resultado será similar a la tabla original:

Vendedor Producto CantidadVendida
Ana Producto1 5
Ana Producto2 3
Luis Producto1 7
Luis Producto3 6
Marta Producto2 4
Marta Producto3 8

Comparación y Uso de PIVOT y UNPIVOT

  • PIVOT es útil para convertir filas en columnas, facilitando la agregación y el resumen de datos en una vista de tabla cruzada.
  • UNPIVOT es útil para normalizar datos, convirtiendo columnas en filas y permitiendo un análisis más detallado o diferentes tipos de agregaciones.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.