Transact-sql 中的 rollup 和cube的使用
进行分组统计汇总,可以在GROUP BY子句中使用WITH ROLLUP和WITH CUBE参数。
ROLLUP指定在结果集内不仅包含由GROUP BY提供的行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。
而CUBE参数则在使用ROLLUP参数所返回结果集的基础上,再将每个可能的组和子组组合在结果集内返回。
例如,假设dbo.table_1表中存在下列数据:
name ProductID Sales
Kathy 1 10
Nick 1 10
Nick 2 30
Jane 1 10
Jane 2 30
执行下面的查询语句:
CUBE
ROLLUP
得到下面的结果集合,可以看出,使用WITH CUBE多出了对子组ProductID的两行汇总。
with rollup 的结果集
Name ProductID total
-------------- ----------- -----
NULL NULL 90
Jane NULL 40
Jane 1 10
Jane 2 30
Kathy NULL 10
Kathy 1 10
Nick NULL 40
Nick 1 10
Nick 2 30
With Cube 的结果集
Name ProductID total
-------------- ----------- ------
NULL NULL 90
NULL 1 30
NULL 2 60
Jane NULL 40
Jane 1 10
Jane 2 30
Kathy NULL 10
Kathy 1 10
Nick NULL 40
Nick 1 10
Nick 2 30
Name ProductID total
-------------- ----------- -----
NULL NULL 90
Jane NULL 40
Jane 1 10
Jane 2 30
Kathy NULL 10
Kathy 1 10
Nick NULL 40
Nick 1 10
Nick 2 30
With Cube 的结果集
Name ProductID total
-------------- ----------- ------
NULL NULL 90
NULL 1 30
NULL 2 60
Jane NULL 40
Jane 1 10
Jane 2 30
Kathy NULL 10
Kathy 1 10
Nick NULL 40
Nick 1 10
Nick 2 30
继续追寻。。。。。。