select name , area_no , nvl(city,'共'||area_num||'家') city , nvl(amount,all_amount) amount from (SELECT decode(grouping(NAME),'1','合计',name) name , decode(grouping(AREA_NO),'1','啥jb玩意',AREA_NO) AREA_NO , CITY ,AMOUNT , COUNT(AREA_NO) area_num , SUM(AMOUNT) all_amount FROM (SELECT '小明1' NAME, '1001' AREA_NO ,'长春' CITY , '100' AMOUNT FROM DUAL UNION ALL SELECT '小明2' NAME, '1002' AREA_NO ,'吉林' CITY , '200' AMOUNT FROM DUAL UNION ALL SELECT '小明3' NAME, '1003' AREA_NO ,'延边' CITY , '400' AMOUNT FROM DUAL UNION ALL SELECT '小明4' NAME, '1001' AREA_NO ,'长春' CITY , '200' AMOUNT FROM DUAL UNION ALL SELECT '小明5' NAME, '1002' AREA_NO ,'吉林' CITY , '400' AMOUNT FROM DUAL UNION ALL SELECT '小明6' NAME, '1003' AREA_NO ,'延边' CITY , '100' AMOUNT FROM DUAL UNION ALL SELECT '小明7' NAME, '1002' AREA_NO ,'吉林' CITY , '600' AMOUNT FROM DUAL ) GROUP BY ROLLUP(NAME,AREA_NO,CITY,AMOUNT) having grouping_id(NAME,AREA_NO,CITY,AMOUNT) = 15 or( grouping(name) = '0' and grouping(area_no) = '0' and grouping(city) = '0' and grouping(amount) = '0') )
having grouping_id(NAME,AREA_NO,CITY,AMOUNT) = 15 这一句=15,15是什么意思,谢谢!!!
能否解释一下这个语句having grouping_id(NAME,AREA_NO,CITY,AMOUNT) = 15 or( grouping(name) = '0' and grouping(area_no) = '0' and grouping(city) = '0' and grouping(amount) = '0')谢谢!!!
union all
select '合计',count(1),'',sum(总金额) from table
|名一|0000| 区1|20000|
|名二|0001| 区1|10000|
|....|....|....|.....|
|合计|共5家| |70000|
不使用union all,统计如上结果,该如何实现,因为我的SQL拼得比较长,所以不想用UNION ALL,谢谢!!
http://blog.csdn.net/wzy0623/article/details/2838080
select name , area_no , nvl(city,'共'||area_num||'家') city , nvl(amount,all_amount) amount
from
(SELECT decode(grouping(NAME),'1','合计',name) name ,
decode(grouping(AREA_NO),'1','啥jb玩意',AREA_NO) AREA_NO ,
CITY ,AMOUNT ,
COUNT(AREA_NO) area_num ,
SUM(AMOUNT) all_amount
FROM
(SELECT '小明1' NAME, '1001' AREA_NO ,'长春' CITY , '100' AMOUNT FROM DUAL UNION ALL
SELECT '小明2' NAME, '1002' AREA_NO ,'吉林' CITY , '200' AMOUNT FROM DUAL UNION ALL
SELECT '小明3' NAME, '1003' AREA_NO ,'延边' CITY , '400' AMOUNT FROM DUAL UNION ALL
SELECT '小明4' NAME, '1001' AREA_NO ,'长春' CITY , '200' AMOUNT FROM DUAL UNION ALL
SELECT '小明5' NAME, '1002' AREA_NO ,'吉林' CITY , '400' AMOUNT FROM DUAL UNION ALL
SELECT '小明6' NAME, '1003' AREA_NO ,'延边' CITY , '100' AMOUNT FROM DUAL UNION ALL
SELECT '小明7' NAME, '1002' AREA_NO ,'吉林' CITY , '600' AMOUNT FROM DUAL )
GROUP BY ROLLUP(NAME,AREA_NO,CITY,AMOUNT)
having grouping_id(NAME,AREA_NO,CITY,AMOUNT) = 15
or( grouping(name) = '0'
and grouping(area_no) = '0'
and grouping(city) = '0'
and grouping(amount) = '0') )
这一句=15,15是什么意思,谢谢!!!
or( grouping(name) = '0'
and grouping(area_no) = '0'
and grouping(city) = '0'
and grouping(amount) = '0')谢谢!!!
给你解释一下啊,呵呵
grouping_id(NAME,AREA_NO,CITY,AMOUNT) ,括弧里面不是有 4个字段吗,
这四个字段的 grouping(字段名) , 如果,这个字段 为空,则返回 1, 如果,不为空,则返回0 ,
grouping_id(NAME,AREA_NO,CITY,AMOUNT) , 就是 利用这个返回 值 做判断的, 返回的 结果
应该是 1111(二进制) ,换成十进制 就是15了, 呵呵 ,这么解释 ,不专业。
oracle 说, GROUPING的位向量 ,GROUPING_ID 就是利用 这个位向量 查询的。
不知道,说清楚了没有。 没清楚的话,给我留言 ,我 在给你写几个例子 ,你看看就行了 。或者你上网找一下,
grouping ,grouping_id , group_id ,主要还是 rollup(),cube()结合使用 。
当时,没搞太明白 ,你那个 共多少家 那个 是统计的 什么, 你可以根据业务需求, 做grouping_id
你研究一下吧