2014-12-04 111 views
0

這是我的名單看起來像:ORACLE SQL排序問題

STUDENTID   COURSEID  PLACE 
-------------------- -------- ---------- 
1     XXX123   1 
2     YYY123   2 
2     XXX123   3 

的地方是當在COURSEID的STUDENTID registerd的序列,所以第一個註冊過的課程給出的數字1等等。

我遇到的問題是,我需要重新安排列表看起來像這樣:

STUDENTID   COURSEID  PLACE 
-------------------- -------- ---------- 
1     XXX123   1 
2     YYY123   1 
2     XXX123   2 

等等場所是一個數字,其訂購COURSEID。當我在表中刪除一行時,第二個人需要被編號爲1,a.s.o.

回答

1

您可以使用row_number()功能做到這一點:

select studentid, courseid, row_number() over (partition by courseid order by place) as place 
from table t; 

因爲你想這時候有改動的數據重新計算,我不建議您更改基礎數據。只需創建具有這個邏輯視圖:

create view v_courseplace as 
    select studentid, courseid, row_number() over (partition by courseid order by place) as place 
    from table t; 

除非你有一個非常大的表,性能不應該是一個問題。

+0

確實。如果您想要的數據(作爲列)可以從「真實數據」中扣除,則不應存儲可導出的數據,而應將其作爲報告。這可能包括創建視圖,但您也可以編寫一個過程來返回數據。 – tvCa 2014-12-04 12:24:46