select 部门,sum(a项销售额),sum(b项销售额),
RATIO_TO_REPORT(sum(a项销售额)) OVER () AS a占销售总额比例, 
RATIO_TO_REPORT(sum(b项销售额)) OVER () AS b占销售总额比例
from table  
group by 部门; 

解决方案 »

  1.   

    上面的不行啊,关键是GROUP BY后怎么得出总量。
      

  2.   

    GROUP BY 以后如果再用查询也应该都是按照部门统计的!所以用一个语句可能很难
      

  3.   

    没错, fightintokyo(黑龙) 的方法不能计算总量,希望大家再想想办法!
      

  4.   

    谁说我的方法不行?执行过么?RATIO_TO_REPORT(sum(a项销售额)) OVER () 
    over后面没有条件,应该是求占总量的比例。这是oracle在8.1.6以后的Enterprise Edition支持的新功能。我现在的环境没法执行,等我晚上回家后测试一下,把结果发上来。
      

  5.   

    啊,确实可行,上午没仔细调试!!,谢谢 fightintokyo(黑龙) !!对ORACLE不熟悉,能讲一下:RATIO_TO_REPORT(sum(a项销售额)) OVER () AS a占销售总额比例这句话的工作原理吗??还有,我想把 销售总额之和(2+6+10+4+10=32)也作为一列显示出来,该怎么写!!!万分感谢!!!
      

  6.   

    你这里所占销售总额比例指的是a和b的全部为总量,fightintokyo(黑龙)的这种写法只是计算的a或者b的总量,应该是:
    SQL> select * from t1;   A项销售额  B项销售额   销售总额
    - ---------- ---------- ----------
    A          1          1          2
    B          3          3          6
    C          5          5         10
    B          2          2          4
    A          6          4         10SQL> select
      2    a.部门,a.a项销售额之和,a.b项销售额之和,b.a占销售总额比例,b.b占销售总额比

      3  from
      4    (select 部门,sum(a项销售额) a项销售额之和,sum(b项销售额) b项销售额之和 fr
    om t1 group by 部门) a,
      5    (select 部门,sum(a项销售额/(select sum(销售总额) 销售总额 from t1)) a占销
    售总额比例,
      6                 sum(b项销售额/(select sum(销售总额) 销售总额 from t1)) b占销
    售总额比例 from t1 group by 部门) b
      7  where a.部门=b.部门;  A项销售额之和 B项销售额之和 A占销售总额比例 B占销售总额比例
    - ------------- ------------- --------------- ---------------
    A             7             5          .21875          .15625
    B             5             5          .15625          .15625
    C             5             5          .15625          .15625
      

  7.   

    发现新问题!!!!!
    fightintokyo(黑龙),你好,我又用你的方法仔细测试了一下,你得到的a占销售总额比例分别是:对A部门结果是:(1+6)/(1+3+5+2+6),即分母是"项销售额"一列的和,而我要的是"销售总额"的和,即:(1+6)/32你不妨试一下就知道了
      

  8.   

    呵呵,高手越来越多,
    zmgowin(隐者(龙祖宗)) 的方法是正确的,就是太复杂了,我的表有15列(a,b,c,.......)
    照你的写法要很长,不过终于能实现了!!!!
      

  9.   

    不好意思,没看清楚你的需求。不过我的方法还是可以用的。这次经过调试,结果正确。
    原理是 各项部门别占销售总额比例 = 各项部门别占各项销售总额比例 * 各项总额占销售总额比例Select 部门, a项销售额, b项销售额, 销售总额,
           a项总额占销售总额比例* a项部门别销售比例 as a占销售总额比例,
           b项总额占销售总额比例* b项部门别销售比例 as b占销售总额比例
    From ( select sum(a项销售额)/ sum(销售总额) as a项总额占销售总额比例,
                  sum(b项销售额)/ sum(销售总额) as b项总额占销售总额比例,
         sum(销售总额) as销售总额
           from  table
         ),
         ( select 部门,
                  sum(a项销售额) as a项销售额,
                  sum(b项销售额) as b项销售额,
                  RATIO_TO_REPORT(sum(a项销售额)) OVER () AS a项部门别销售比例, 
                  RATIO_TO_REPORT(sum(b项销售额)) OVER () AS b项部门别销售比例
          from table  
          group by 部门
         );特别是如果你想求某一段时间内的各项部门别占销售总额比例时,在OVER ()中指定条件就OK了。
      

  10.   

    zmgowin(隐者(龙祖宗)) ,你好我还有一个问题想请教,就是我想把 销售总额之和(2+6+10+4+10=32)也作为一列显示出来,该怎么写!!!