|名称|编码|区县|总金额|
|    |         |      |
|合计|共多少家 |      |四个字段“名称”、编码、“区县”和“总金额”,想在最后一行进行汇总,请问怎么写SQL,最后可以展示如上面的结果,谢谢!  

解决方案 »

  1.   

    首先,你的返回结果的列数应该是一样的,上面是4列,合计是3列,肯定是不行的。如果一样的话,可以这样select 名称,编码,区县,总金额 from table
    union all
    select '合计',count(1),'',sum(总金额) from table
      

  2.   

    |名称|编码 |区县|总金额|
    |名一|0000| 区1|20000|  
    |名二|0001| 区1|10000|  
    |....|....|....|.....|
    |合计|共5家|    |70000|
    不使用union all,统计如上结果,该如何实现,因为我的SQL拼得比较长,所以不想用UNION ALL,谢谢!!
      

  3.   

    不用union  我也不知道了 我也用union
      

  4.   

    参考下rollup的写法,可以实现合计的功能
    http://blog.csdn.net/wzy0623/article/details/2838080
      

  5.   


     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') )
     
      

  6.   

    having grouping_id(NAME,AREA_NO,CITY,AMOUNT) = 15
    这一句=15,15是什么意思,谢谢!!!
      

  7.   

    能否解释一下这个语句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')谢谢!!!
      

  8.   

      
     给你解释一下啊,呵呵 
    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()结合使用 。 
      

  9.   

      还有个事,给你说一下,
       当时,没搞太明白 ,你那个 共多少家  那个 是统计的 什么, 你可以根据业务需求, 做grouping_id 
     你研究一下吧