Определение итоговых данных с помощью оператора 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