请问这个分组统计怎么做?
比如统计出来的结果需要是这样的省名称 市名称 次数
------------------------------------------
全国 0        100
------------------------------------------
辽宁省 0 10
------------------------------------------
辽宁省 沈阳市   5
------------------------------------------
辽宁省 铁岭市 3
------------------------------------------
辽宁省 大连市 2
------------------------------------------
河北省 0 20
------------------------------------------
河北省 石家庄市 10
....
-------------------------------------------------------------------------现在已经有一个统计结果可以用,这个统计结果是按照市统计的,类似于
省名称 市名称 次数
------------------------------------------
辽宁省 沈阳市 5
------------------------------------------
辽宁省 铁岭市 3
------------------------------------------
辽宁省 大连市 2
------------------------------------------
河北省 石家庄市 10
......
--------------------------------------------------------------------------怎么根据下面这个的统计结果,统计出上面的统计结果(全国包括省,省包括市)

解决方案 »

  1.   

    /*
    全国 0        100 
    辽宁省 0 10 
    辽宁省 沈阳市  5 
    辽宁省 铁岭市 3 
    辽宁省 大连市 2 
    河北省 0 20 
    河北省 石家庄市 10 */
    with temp as
    (
    select '辽宁省' a ,'沈阳市' b, 5  c from dual
    union all
    select '辽宁省','铁岭市', 3   from dual
    union all
    select '辽宁省','大连市', 2   from dual
    union all
    select '河北省','石家庄市', 2   from dual
    )
    select a,b,c from temp
    union all
    select  nvl(a,'全国'),'' ,sum(c) from temp group by rollup(a)
    order by a,b--result:河北省 石家庄市 2
    河北省 2
    辽宁省 大连市 2
    辽宁省 沈阳市 5
    辽宁省 铁岭市 3
    辽宁省 10
    全国 12
      

  2.   

    select decode(count(distinct 省),1,max(省),'全国') 省名称,
      decode(count(1),1,max(市),'0')市名称,
      sum(次数)次数
    from tt
    group by grouping sets((rownum),(省),('1'))
      

  3.   

    狂狼
    with tt as
    (
    select '辽宁省' a ,'沈阳市' b, 5  c from dual
    union all
    select '辽宁省','铁岭市', 3   from dual
    union all
    select '辽宁省','大连市', 2   from dual
    union all
    select '河北省','石家庄市', 2   from dual
    )
    select decode(count(distinct a),1,max(a),'全国') 省名称, 
      decode(count(1),1,max(b),'0')市名称, 
      sum(c)次数 
    from tt 
    group by grouping sets((rownum),(a),('1'))
    结果如下:
    辽宁省 沈阳市 5
    辽宁省 铁岭市 3
    辽宁省 大连市 2
    河北省 石家庄市 2
    河北省 石家庄市 2
    辽宁省 0 10
    全国 0 12
    排序有问题哦
      

  4.   


    -- 加一下order by a 就可以了!
      

  5.   

      最好還是用group by rollup(全國,省,市),那就簡單多了.  
      

  6.   

    with temp as
    (
     select '辽宁省' a,'沈阳市' b,5 c from dual 
     union all
     select '辽宁省' a,'铁岭市' b,3 c from dual
     union all
     select '辽宁省' a,'大连市' b,2 c from dual
     union all
     select '河北省' a,'石家庄市' b,2 c from dual
     union all
     select '河北省' a,'秦皇岛市' b,3 c from dual
    )
    select nvl(a,'全国') a,b,c from (
    select a,b,sum(c) c from temp where a is not null group by cube(a,b)
    ) t where t.a is not null or (t.a is null and t.b is null) 
      

  7.   

    with temp as
    (
     select '辽宁省' a,'沈阳市' b,5 c from dual 
     union all
     select '辽宁省' a,'铁岭市' b,3 c from dual
     union all
     select '辽宁省' a,'大连市' b,2 c from dual
     union all
     select '河北省' a,'石家庄市' b,2 c from dual
     union all
     select '河北省' a,'秦皇岛市' b,3 c from dual
    )
    select nvl(a,'全国') a,b,c from (
    select a,b,sum(c) c from temp where a is not null group by cube(a,b) order by a desc
    ) t where t.a is not null or (t.a is null and t.b is null) 结果如下:
    1 全国 15
    2 辽宁省 大连市 2
    3 辽宁省 沈阳市 5
    4 辽宁省 铁岭市 3
    5 辽宁省 10
    6 河北省 秦皇岛市 3
    7 河北省 石家庄市 2
    8 河北省 5