Cube与Rollup函数详解 [SQL Server]

为了简单起见,假设如下表:

DI1  ID2  MyValue

---------------------------

A      X       2
A      X     1
A    Y      2
A    Y      1
B    X      3
B    Y      2
B    Y           2

使用SUM()函数对第三个列值总计:

 
  
SELECT ID1,ID2,SUM(MyValue)
FROM #Sample
GROUP BY ID1,ID2

返回结果:

ID1  ID2  (无列名)

A    X     3
B    X     3
A    Y     3
B    Y     4

Cube和Rollup从分组的查询中取得结果,对第一列的值或者每个出现在Group By列列表中的所有列值的组合应用相同的聚合函数。

Rollup函数

这是对Group By列列表的第一列进行小计和总计计算的最简单的方法。在假想的例子中,除计算每个唯一的列值的总和以外,还需计算DI1列中A和B行的总和。

 
  
SELECT ID1,ID2,SUM(MyValue)
FROM #Sample
GROUP BY ID1,ID2
WITH ROLLUP

结果如下:

ID1  ID2  (无列名)

-------------------------

A    X     3
A    Y     3
A   NULL    6
B    X     3
B    Y     4
B   NULL    7
NULL NULL    13

空值表示在计算聚合值时忽略相关的列。

Cube函数

Cube运算符是对Rollup运算符的扩展。Cube不用于为GROUP BY列表中的第1列积累聚合值,而是对每个分组的列值执行积累。

 
  
SELECT ID1,ID2,SUM(MyValue)
FROM #Sample
GROUP BY ID1,ID2
WITH CUBE

结果:

ID1  ID2  (无列名)

-------------------------

A    X     3
B    X     3
NULL  X     6
A    Y     3
B    Y     4
NULL  Y     7
NULL NULL    13
A   NULL    6
B   NULL    7

第1列中的空值表示该列值是第2列的值的积累。这些行包含ID2等于X或者Y的行的小计。其中两个分组列的值都为空,表明这两个列是一个总计,即所有行的和。

转载于:https://www.cnblogs.com/Ryan_j/archive/2010/11/02/1867044.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值