公司每个员工都有核定福利,按照福利多少排序如下:
-----------------
姓名 福利   
A   200
B     100
C     50
-----------------假设X= 250,则
-----------------
姓名 福利   分配
A   200    200
B     100    50
C     50     0
-----------------公司目前有福利款X元,小于所有员工合计福利。按福利大小顺序给员工发放,直至福利款发放完毕,请问该SQL如何写?

解决方案 »

  1.   

    A   200    200
    B     100    50
    C     50     0
    --加权平均么
      

  2.   

    有个分析函数
    RATIO_TO_REPORT 
    功能描述:该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比,即当前行对sum(expression)的贡献。
    SAMPLE:下例计算每个员工的工资占该类员工总工资的百分比SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rr
      FROM employees
    WHERE job_id = 'PU_CLERK';LAST_NAME                     SALARY         RR
    ------------------------- ---------- ----------
    Khoo                            3100 .223021583
    Baida                           2900 .208633094
    Tobias                          2800 .201438849
    Himuro                          2600  .18705036
    Colmenares                      2500 .179856115
      

  3.   

    SQL> select * from maoj1;NAME            MONEY
    ---------- ----------
    A                 200
    B                 100
    C                  50
    D                 150SQL> 
    SQL> select name, money, decode(sign(&x - smoney), 1, money, decode(sign(&x - smoney + money), 1, &x - smoney + money, 0)) from (
      2  select name, money, sum(money) over(order by money desc)as smoney
      3    from maoj1 order by money desc
      4    )
      5  ;NAME            MONEY DECODE(SIGN(253-SMONEY),1,MONE
    ---------- ---------- ------------------------------
    A                 200                            200
    D                 150                             53
    B                 100                              0
    C                  50                              0