Определение итоговых данных с помощью оператора ROLLUP

Оператор ROLLUP используется для создания отчетов, содержащих подытоги и итоги. Оператор ROLLUP формирует результирующий набор, подобный результирующим наборам, создаваемым оператором CUBE. Дополнительные сведения см. в разделе Суммирование данных с помощью оператора CUBE.

Ниже представлены различия между операторами CUBE и ROLLUP.

  • Оператор CUBE создает результирующий набор, содержащий статистические выражения для всех комбинаций значений заданных столбцов.
  • Оператор ROLLUP создает результирующий набор, содержащий статистические выражения иерархии значений в заданных столбцах.

Например, в простой таблице Inventory содержится следующее:

Item                 Color                Quantity                   
-------------------- -------------------- -------------------------- 
Table                Blue                 124                        
Table                Red                  223                        
Chair                Blue                 101                        
Chair                Red                  210                        

В результате выполнения следующего запроса создается отчет о подытогах:

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)

Если в запросе ключевое слово ROLLUP поменять на CUBE, то к результирующему набору добавятся две дополнительных строки:

ALL                  Blue                 225.00                     
ALL                  Red                  433.00                     

Операция CUBE формирует строки, содержащие все возможные комбинации значений параметров Item и Color. Например, в результате выполнения команды CUBE выдаются не только все возможные комбинации значений параметров Color и Item объекта Chair (Red, Blue и Red + Blue), но также отображаются все возможные комбинации значений параметра Item со значением Red параметра Color (Chair, Table и Chair + Table).

Операция ROLLUP не выдает все возможные комбинации значений столбцов, расположенных справа и слева от предложения GROUP BY. Например, оператор ROLLUP не возвращает все возможные комбинации значений Item для каждого значения Color.

Результирующий набор, созданный оператором ROLLUP, подобен набору, возвращаемому оператором COMPUTE BY. Однако оператор ROLLUP имеет следующие преимущества.

  • Оператор ROLLUP возвращает единственный результирующий набор, а COMPUTE BY — несколько результирующих наборов, что приводит к усложнению кода приложения.
  • Оператор ROLLUP, в отличие от COMPUTE BY, может быть использован в серверном курсоре.
  • В некоторых случаях оптимизатор запросов при работе с оператором ROLLUP дает лучшие результаты, чем при работе с оператором COMPUTE BY.

См. также

Основные понятия

Суммирование данных с помощью COMPUTE и COMPUTE BY

Другие ресурсы

SELECT (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005