添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

除了 ROLLUP 子句提供的分层分组模式外,您还可以通过 CUBE 子句创建数据立方体,即通过 GROUP BY 表达式的每种可能组合对输入进行 n 维汇总。CUBE 子句最终会生成每组值的元素的所有可能组合的积集。这在进行复杂数据分析时会很有用。

如果 CUBE 子句中有 n 个 GROUPING 表达式,其格式为 (X 1 ,X 2 , ...,X n ),则 CUBE 将生成 2 n 个分组集,如下所示:

{(), (X1), (X1,X2), (X1,X2,X3), ... , (X1,X2,X3, ...,Xn),
(X2), (X2,X3), (X2,X3,X4), ... , (X2,X3,X4, ... , Xn), ... , (Xn)}.

以下查询按年份、季度和年份中每季对销售订单进行了汇总,并生成了下表中所示的结果集:

SELECT QUARTER( OrderDate ) AS Quarter,
       YEAR( OrderDate ) AS Year,
       COUNT( * ) AS Orders,
       GROUPING( Quarter ) AS GQ,
       GROUPING( Year ) AS GY
FROM SalesOrders
GROUP BY CUBE ( Year, Quarter )
ORDER BY Year, Quarter;

此查询会返回以下结果:

结果集中的第一行显示 2000 和 2001 两年中所有季度全部订单的总计 (648)。

第 2-5 行按任何年份中的日历季度对销售订单进行了汇总。

第 6 和 11 行分别显示 2000 和 2001 年的总订单数。

第 7-10 行和第 12-14 行分别显示 2000 和 2001 年的季度订单总数。

注意 GROUPING 函数返回的值是如何用于区分包含总计的行和小计行的。对于第 6 行和第 11 行,季度 (Quarter) 列中出现 NULL 且 GQ 列的值为 1(Grouping by Quarter,按季度分组),这表示该行为该年所有季度的订单总计。

使用 CUBE 生成的结果集可能会非常大,因为 CUBE 呈指数方式生成分组集。鉴于此原因,不支持包含超过 64 个 GROUP BY 表达式的 GROUP BY 子句。如果语句超出此限制,则语句将失败,并且会报告错误 SQLCODE -944 (SQLSTATE 42WA1)。

支持 Transact-SQL WITH CUBE 语法