Описание тега rollup

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

В 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.