Описание тега 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
Если ROLLUP
ключевое слово в запросе изменено на CUBE
, то CUBE
набор результатов тот же, за исключением того, что в конце возвращаются эти две дополнительные строки:
ALL Blue 225.00
ALL Red 433.00
В CUBE
операция сгенерировала строки для возможных комбинаций значений из обоих Item
а также Color
. Например, не толькоCUBE
сообщать обо всех возможных комбинациях Color
ценности в сочетании с Item
значение Chair
(Красный, Синий и Красный + Синий), он также сообщает обо всех возможных комбинациях Item
ценности в сочетании с Color
значение Красный (стул, стол и стул + стол).
Для каждого значения в столбцах справа в GROUP BY
пункт, ROLLUP
операция не сообщает обо всех возможных комбинациях значений из столбца или столбцов слева. Например,ROLLUP
не сообщает обо всех возможных комбинациях значений элементов для каждого значения цвета.
Набор результатов ROLLUP
операция имеет функциональность, аналогичную возвращаемой COMPUTE BY
. Однако,ROLLUP
имеет следующие преимущества:
ROLLUP
возвращает один набор результатов, аCOMPUTE BY
возвращает несколько наборов результатов, которые увеличивают сложность кода приложения.ROLLUP
может использоваться в курсоре сервера, покаCOMPUTE BY
не можем.- Оптимизатор запросов может иногда создавать более эффективные планы выполнения для
ROLLUP
чем это может дляCOMPUTE BY
.