Página inicial  

Tema 7. Tablas de referencias cruzadas (II)


Las columnas dinámicas


Como hemos dicho las columnas dinámicas son las que se generan según los valores almacenados en la columna pivote (la que aparece en la cláusula PIVOT), normalmente se genera una columna dinámica por cada valor que se encuentre en la columna pivote del origen de datos.

Cuando los posibles valores que puede tomar la columna pivote son conocidos y queremos definir cuales queremos que aparezcan, sólo unos cuantos porque no nos interesan algunos o todos incluso si no generan resultado, en este caso usaremos la cláusula IN, en la cláusula IN se ponen entre paréntesis todos los posibles valores, o por lo menos los que queremos que aparezcan en el resultado.

Por ejemplo sólo nos interesan los meses de febrero, mayo y diciembre:

 

TRANSFORM Sum(importe)
SELECT rep as empleado
FROM pedidos
GROUP BY rep
PIVOT month(fechapedido) IN (2,5,12);

Si no utilizamos la cláusula IN, los meses de mayo y septiembre no aparecen ya que no hay pedidos realizados durante estos meses, si utilizamos la cláusula IN y definimos los doces valores posibles, sí aparecen las columnas correspondientes a estos meses y observamos que ningún empleado tiene ventas en esos mes.

TRANSFORM Sum(importe)
SELECT rep as empleado
FROM pedidos
GROUP BY rep
PIVOT month(fechapedido) IN (1,2,3,4,5,6,7,8,9,10,11,12);

La cláusula IN también sirve para cambiar el orden de aparición de las columnas dinámicas, las columnas aparecen en el mismo orden en que aparecen en la cláusula IN.

TRANSFORM Sum(importe)
SELECT rep as empleado
FROM pedidos
GROUP BY rep
PIVOT month(fechapedido) IN (10,11,12,1,2,3,4,5,6,7,8,9);

Las columnas fijas

Las columnas fijas son las que aparecen delante de las columnas dinámicas y son fijas porque se genera una sola columna en el resultado por cada columna hayamos indicado en la lista de columnas fijas. Las columnas fijas se indican en la lista de selección de la sentencia SELECT, una columna fija que siempre debemos incluir es la que sirve de encabezado de fila para que podamos saber cada fila a qué valor de encabezado de fila corresponde. Pero además podemos incluir otras columnas por ejemplo columnas de resumen de cada fila, sin que se tenga en cuenta la agrupación por la columna pivote.

Por ejemplo queremos saber para cada empleado cuánto ha vendido en total y cuál ha sido el importe mayor vendido en un pedido.

TRANSFORM Sum(importe) AS Suma
SELECT rep AS empleado, SUM(importe) AS [Total vendido],MAX(importe) AS mayor
FROM pedidos
GROUP BY rep
PIVOT month(fechapedido) ;

Resumen del tema

La instrucción TRANSFORM se utiliza para definir una consulta de referencias cruzadas.

Permite presentar los resultados de una sumaria en una tabla de doble entrada como la que se presenta a continuación:

 


Ejercicios propuestos



 
Pag.7.2
Aviso legal: este curso es gratuito siempre que se visualice desde la página web de aulaClic. No está permitido descargar el curso ni utilizarlo en academias o centros de enseñanza privados sin estar conectado a Internet.
© aulaClic. Todos los derechos reservados. Free Computer tutorials . Prohibida la reproducción por cualquier medio.
Julio-2001.aulaClic.com