cube操作符
要使用cube,首先要了解group by
其实cube和rollup区别不太大,只是在基于group by 子句创建和汇总分组的可能的组合上有一定差别,
cube将返回的更多的可能组合。如果在 group by 子句中有n个列或者是有n个表达式的话,
sqlserver在结果集上会返回2的n-1次幂个可能组合。
注意:
使用cube操作符时,最多可以有10个分组表达式
在cube中不能使用all关键字

GROUPING
是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。

仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。

语法
GROUPING ( column_name )

参数
column_name

是 GROUP BY 子句中用于检查 CUBE 或 ROLLUP 空值的列。

返回类型
int

示例:

select ACCNT_CODE,LEFT(PERIOD,4),SUM(AMOUNT) from TES_A_SALFLDG
WHERE ACCNT_CODE LIKE '160409%'
GROUP BY ACCNT_CODE,LEFT(PERIOD,4) with rollup

 加Grouping示例:

select ACCNT_CODE,PERIOD,JRNAL_NO,SUM(AMOUNT) from TES_A_SALFLDG
WHERE ACCNT_CODE LIKE '160409%'
GROUP BY ACCNT_CODE,PERIOD,JRNAL_NO with rollup
HAVING GROUPING(ACCNT_CODE)=0
AND GROUPING(PERIOD)+GROUPING(JRNAL_NO) IN (0,2)