GROUP BY 与 ROLLUP 和 CUBE

ROLLUP 运算符可用于生成包含小计和总计的报表。

  • CUBE 生成一个结果集,显示所选列中所有值组合的聚合。

  • ROLLUP 生成一个结果集,显示所选列中值的层次结构的聚合。

    项目 颜色 数量
    蓝色 124
    红色 223
    椅子 蓝色 101
    椅子 红色 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 排受影响)

如果查询中的 ROLLUP 关键字更改为 CUBE,则 CUBE 结果集是相同的,除了在结尾返回这两个额外的行:

ALL                  Blue                 225.00                     
ALL                  Red                  433.00 

https://technet.microsoft.com/en-us/library/ms189305(v=sql.90).aspx