Resumir datos con ROLLUP
El operador ROLLUP resulta útil para generar informes que contienen subtotales y totales. El operador ROLLUP genera un conjunto de resultados similar a los generados por el operador CUBE. Para obtener más información, vea Resumir datos con CUBE.
A continuación se muestran las diferencias entre CUBE y ROLLUP:
- CUBE genera un conjunto de resultados que muestra agregados para todas las combinaciones de valores de las columnas seleccionadas.
- ROLLUP genera un conjunto de resultados que muestra agregados para una jerarquía de valores de las columnas seleccionadas.
Por ejemplo, una tabla simple Inventory contiene lo siguiente:
Item Color Quantity
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210
Esta consulta genera un informe de subtotales:
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
ELSE ISNULL(Color, 'UNKNOWN')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP
Item Color QtySum
-------------------- -------------------- --------------------------
Chair Blue 101.00
Chair Red 210.00
Chair ALL 311.00
Table Blue 124.00
Table Red 223.00
Table ALL 347.00
ALL ALL 658.00
(7 row(s) affected)
Si la palabra clave ROLLUP
de la consulta se cambia por CUBE
, el conjunto de resultados de CUBE
es el mismo, excepto que al final se devuelven estas dos filas adicionales:
ALL Blue 225.00
ALL Red 433.00
La operación CUBE
generó filas para las posibles combinaciones de valores de Item
y Color
. Por ejemplo, CUBE
no sólo informa de todas las posibles combinaciones de valores Color
con el valor de Item``Chair
(Red
, Blue
y Red
+ Blue
), sino que también informa de todas las posibles combinaciones de los valores de Item
con el valor Color``Red
(Chair
, Table
y Chair
+ Table
).
Para cada valor de las columnas situadas a la derecha de la cláusula GROUP BY
, la operación ROLLUP
no informa de todas las posibles combinaciones de valores de las columnas situadas a la izquierda. Por ejemplo, ROLLUP
no informa de todas las posibles combinaciones de valores de Item
para cada valor de Color
.
El conjunto de resultados de una operación ROLLUP tiene una funcionalidad parecida a la que devuelve COMPUTE BY. Sin embargo, ROLLUP tiene estas ventajas:
- ROLLUP devuelve un único conjunto de resultados, mientras que COMPUTE BY devuelve múltiples conjuntos de resultados que aumentan la complejidad del código de la aplicación.
- A diferencia de COMPUTE BY, ROLLUP se puede utilizar en un cursor de servidor.
- En ocasiones, el optimizador de consultas puede generar planes de ejecución más eficaces para ROLLUP que para COMPUTE BY.
Vea también
Conceptos
Resumir datos con COMPUTE y COMPUTE BY