1.
表:TABLE1
clm1 clm2 clm3 clum4 balance
------------------------------
   A    B    C     D  100.00现在有如上一组数据,现在要根据字段clm1,clm2,clm3,clm4的不同组合,返回不同的比例数据,得到数据如下。
clm1 clm2 clm3 clum4    balance1   balance2    balance3   balance4
------------------------------
   A    B    C     D  100.00*10% 100.00*30%  100.00*70% 100.00*50%2.
我写了个FUNCTION FUNC_A用于根据clm1 clm2 clm3 clum4的不通过组合,返回比例10%,30%,70%,50%
SQL如下:
select 
clm1,
clm2,
clm3,
clum4,
balance*FUNC_A(clm1,clm2,clm3,clum4,1) balance1,
balance*FUNC_A(clm1,clm2,clm3,clum4,2) balance2,
balance*FUNC_A(clm1,clm2,clm3,clum4,3) balance3,
balance*FUNC_A(clm1,clm2,clm3,clum4,4) balance4
FROM TABLE1此处使用了4次FUNCIION,能否只使用1次?,
另,FUNCITON内部处理较多,不能使用CASE WHEN 方法解决。请大家帮忙看看。

解决方案 »

  1.   

    函数只能返回一个值
    /
    你可以通过存储过程返回多个,但是不能在SQL中直接调用
      

  2.   

    返回多个值可以使用对象解决,但如果是在SQL里面如何使用呢?我现在想到的办法是开游标,遍历数据,
    逐个调用方法,返回4个比率,然后乘比例,得到结果数据,
    但是,我担心,游标效率问题,因为数据量基数比较大。
      

  3.   

    oracle中有个人RATIO_TO_REPORT函数是用来计算比例的,应该可以解决你的难题!
      

  4.   

    RATIO_TO_REPOR oracle自带的函数,专门用来计算整体比例的!