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的行的小计。其中两个分组列的值都为空,表明这两个列是一个总计,即所有行的和。

posted @ 2010-11-02 12:57  RyanBell  阅读(...)  评论(... 编辑 收藏