Pivot Tables en SQL Server

La característica PIVOTE  de SQL Server, permite girar una expresión con valores de tabla convirtiendo los valores únicos de una columna en varias columnas en la salida. En este tip vamos a ver esta característica que permite producir resultados cruzados.

Esta es la tabla tbVentas con algunos datos:

CrossTable

Usando Pivot se obtiene una lista de los productos en la parte superior de cada vendedor, como lo siguiente:

PivotTable

SELECT VENDEDOR, [MANZANA] AS MANZANAS, [NARANJA] AS NARANJAS
FROM 
(
 SELECT VENDEDOR, PRODUCTO, MONTOVENTA
 FROM TBVENTAS
) AS PS
PIVOT
(
 SUM (MONTOVENTA)
 FOR PRODUCTO IN ( [MANZANA], [NARANJA]) 
) AS PVT

¿Cómo funciona?

Hay tres partes que necesitan ser comprendidas con el fin de construir la consulta Pivot.
  • (1) La sentencia SELECT
SELECT VENDEDOR, [MANZANA] AS MANZANAS, [NARANJA] AS NARANJAS
Esta parte de la consulta selecciona las tres columnas de la serie final resultado (VENDEDOR, MANZANA, NARANJA)

  • (2) La consulta que extrae los datos en bruto
(SELECT VENDEDOR, PRODUCTO, MONTOVENTA  FROM TBVENTAS) AS PS
Esta consulta extrae todas las filas de datos que necesitamos para crear los resultados cruzados. El (PS) después de la consulta es la creación de una tabla temporal de los resultados que luego pueden ser utilizados para satisfacer la consulta para el paso 1.

  • (3) La expresión PIVOTE
PIVOT(SUM (MONTOVENTA) FOR  PRODUCTO IN ( [MANZANA], [NARANJA]) ) AS PVT
Esta consulta hace el cruze Pivot y pone los resultados en una tabla temporal denominada PVT


Otra cosa clave a notar aquí es el uso de los corchetes [] alrededor de los nombres de las columnas, tanto en el SELECT en la parte (1) y en el IN en la parte (3). Estas son clave, ya que la operación de pivote está tratando los valores en estas columnas como nombres de columna y así es como se hace la ruptura y la agrupación para mostrar los datos.

Si quieres saber más de Pivot and UnPivot, visita la página de Microsoft: http://msdn.microsoft.com/en-us/library/ms177410(SQL.105).aspx

Comentarios