4 5
5 5
A A2
---------- ----------
6 5
7 5
8 5
5
1 4
2 4
3 4
4
19 rows selected.
从上面的输出中,我们会发现cube会将许多的null值,如果cube()里指定的列本身就具有null值,又需要如何区分呢?
解决方法为通过grouping()函数来排除null值,例如grouping(a)来检测A表中a列是否有一行null值是由cube产生的,如果有,则返回1,其他所有情况,则返回0.
接着再结合decode()函数或case表达式,来将cube()产生的null值转化成通俗易懂的字符串。
实验如下:
HR@ORA11GR2 > select decode(grouping(a),1,'cube_value',a) a , decode(grouping(a2), 1, 'cube_value',a2) a2 from a group by cube(a, a2) order by a2 desc;
A A2
---------------------------------------- ----------------------------------------
cube_value cube_value
4 cube_value
8 cube_value
7 cube_value
6 cube_value
5 cube_value
3 cube_value
2 cube_value
1 cube_value
cube_value 5
6 5
A A2
---------------------------------------- ----------------------------------------
8 5
7 5
4 5
5 5
1 4
cube_value 4
3 4
2 4