Resumir datos con ROLLUP

SQL Server 2005

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.

Adiciones de comunidad

AGREGAR
Mostrar: