存儲過程中有關排序的一個問題
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的正解