R1=196. 
R2=84.
R3=91.
R4=147.對於以上的4個數字進行一個排序,但是縂的順序不變
(Ri的序號與f(Ri)是相對應的)依據 Ri 從大到小排, Ri最大序號是1, 其次是 2,… 一直到 n.
f(R1)=1   等式右邊數字是Ri排序以後的排序順序的序號結果應如下:
f(R1)=1, f(R2)=4, f(R3)=3, f(R4)=2在Oracle的存儲過程中該怎麽處理呢?謝謝大家阿~幫我一下哦~^_^  

解决方案 »

  1.   

    没写存储过程,随便写了个SQL语句,等楼下的吧.
    create table table1(A VARCHAR2(10),B INTEGER);
    INSERT INTO TABLE1 VALUES('R1',196); 
    INSERT INTO TABLE1 VALUES('R2',84 );
    INSERT INTO TABLE1 VALUES('R3',91 );
    INSERT INTO TABLE1 VALUES('R4',147);
    COMMIT;
    SELECT A,B,COUNT(B) OVER(ORDER BY B DESC)B1 FROM TABLE1 ORDER BY A;A                   B         B1
    ---------- ---------- ----------
    R1                196          1
    R2                 84          4
    R3                 91          3
    R4                147          2
      

  2.   

    R1=196
    R2=84.
    R3=91.
    R4=147.對這個數字進行排序,從大到小,結果應如下
               序號
    R1=196      1
    R4=147.     2
    R3=91.      3
    R2=84.      4最終想得到的結果是
    f(R1)=1
    f(R2)=4
    f(R3)=3
    f(R4)=2
      

  3.   

    SQL>   select 'f('||zz.name||')',rownum
      2      from (select tt.*
      3              from (select 'R1' as name, 196 as value
      4                      from dual
      5                    union all
      6                    select 'R2' as name, 84 as value
      7                      from dual
      8                    union all
      9                    select 'R3' as name, 91 as value
     10                      from dual
     11                    union all
     12                    select 'R4' as name, 147 as value from dual) tt
     13             order by tt.value desc
     14           ) zz
     15      order by zz.name;'F('||ZZ.NAME||')'     ROWNUM
    ------------------ ----------
    f(R1)                       1
    f(R2)                       4
    f(R3)                       3
    f(R4)                       2
      

  4.   

    SELECT 'f('||A||')='||COUNT(B) OVER(ORDER BY B DESC) FROM TABLE1 ORDER BY A;