日期:2014-05-17  浏览次数:20866 次

存儲過程中有關排序的一個問題
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的存儲過程中該怎麽處理呢?謝謝大家阿~幫我一下哦~

^_^    


------解决方案--------------------
沙發
------解决方案--------------------
貌似一个排序就可以实现LZ想要的,不过俺不会,哈,关注~~~~
------解决方案--------------------
不是很明白你的意思,贴点一数据出来试试
------解决方案--------------------
没写存储过程,随便写了个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
------解决方案--------------------
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

------解决方案--------------------
SELECT 'f( '||A|| ')= '||COUNT(B) OVER(ORDER BY B DESC) FROM TABLE1 ORDER BY A;
------解决方案--------------------
ls的正解