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
1
2
3
4
5
6
| 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:
1
2
3
4
5
6
7
| 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
1
2
3
4
5
6
7
| 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
1
2
3
4
5
6
7
| 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!
0 comments:
Post a Comment