jueves, 14 de mayo de 2015

Procedimientos para agrupar y resumir datos en SQL Server



Saludos gente!! En esta oportunidad explicaremos algunas expresiones del Transact SQL para agrupar y resumir datos. 
Como requisito necesitaremos la base de datos de ejemplo Northwind la cual la puedes descargar desde el indice o en el siguiente enlace :  DESCARGAR BD NORTHWIND

Es indispensable tener la base de datos Nortwind porque la utilizaremos no sólo en estos ejemplos; también la usaremos en las publicaciones de ejercicios de este tema.

Bien, sin más preámbulos iniciemos.

[Order Details]

Esta tabla perteneciente a la Northwind, se encarga de manejar los pedidos. 

Order Id : Nº de Pedido.
Producto Id : Nº de Producto.

Ambos campos son Primary Key, con lo que no puede haber una combinación de ambos campos que sea igual.

OrderId ProductId
1 A
1 B
1 C
2 A
3 C

Es decir en este caso no podría existir una nueva combinación “1 A” o “2 A”.
Quantity: Es la cantidad del producto del pedido.

  • ROLLUP
Se usa para presentar resúmenes de datos. A de usarse junto con la clausula group by, lo que hace es realizar un resumen de los campos incluidos en el rollup.

SELECT PRODUCTID, ORDERID,
SUM(QUANTITY) AS CANTIDAD_TOTAL
FROM [ORDER DETAILS]
GROUP BY PRODUCTID, ORDERID
WITH ROLLUP
ORDER BY PRODUCTID, ORDERID


Este ejemplo suma todas las cantidades, y mediante rollup, muestra una fila con la suma de todas las cantidades de cada producto, y además, otra fila con la suma de todas las cantidades de todos los productos. El resultado de este ejemplo, sería el que muestra la imagen:

SELECT PRODUCTID, ORDERID,
SUM(QUANTITY) AS CANTIDAD_TOTAL
FROM [ORDER DETAILS]
WHERE ORDERID < 10250
GROUP BY PRODUCTID, ORDERID
WITH ROLLUP
ORDER BY PRODUCTID, ORDERID


  • CUBE
Al igual que Rollup realiza resúmenes de campos agrupados. Pero en este caso muestra un resumen con cada combinación posible de los campos agrupados.

SELECT PRODUCTID, ORDERID,
SUM(QUANTITY) AS CANTIDAD_TOTAL
FROM [ORDER DETAILS]
WHERE ORDERID < 10250
GROUP BY PRODUCTID, ORDERID
WITH CUBE
ORDER BY PRODUCTID, ORDERID

En este caso como vemos en la imagen, hace un resumen con la suma de la cantidad de cada combinación posible entre el productid y el orderid. 


  • GROUPING
Indica si el resultado de un campo es el que hay en la propia tabla o se ha introducido mediante una cláusula de resumen, es decir, para saber por ejemplo si un “Null” de una celda es de la propia tabla o ha es debido a una clausula Cube o Rollup. 

SELECT PRODUCTID, GROUPING(PRODUCTID), ORDERID, GROUPING(ORDERID),
SUM(QUANTITY) AS CANTIDAD_TOTAL
FROM [ORDER DETAILS]
WHERE ORDERID < 10250
GROUP BY PRODUCTID, ORDERID
WITH CUBE
ORDER BY PRODUCTID, ORDERID



Vemos que por cada grouping que hemos puesto, sale una columna, 1 indica que el Null es creado por la clausula Cube y 0 indica que es de la tabla.
Poniéndole un alias al grouping saldría el nombre de columna que le indiquemos.


Finalmete, el resultado de estos procedimientos se puede mostrar en lugar de en cuadrículas, mediante texto, para ello, realizaremos el siguiente paso:


Espero haber ayudado en algo. Hasta la próxima oportunidad!








No hay comentarios:

Publicar un comentario en la entrada