2012-11-01 106 views
0

我試圖做一些SQL和Oracle甲骨文編號更新

我有一個包含文本數據的工作表,以及文本應如何顯示,1-27數字的順序列表。

So: 
Bonjour | 1 
mon nom | 2 
Jean P. | 3 
Hello J | 4 
Je suis | 5 
is John | 6 

現在我要重新排序列表編號: 5號2,和移動2〜3個,3〜4,4〜5,但不5至6個或6到任何東西。請記住,這是一個數字27列表。

So I'll have: 
Bonjour | 1 
mon nom | 2 
Jean P. | 3 
Hello J | 4 
My name | 5 
is John | 6 

有沒有人知道一個好方法去做這件事?

回答

2

喜歡的東西:

update foobar 
    set sort_nr = case 
        when sort_nr = 5 then 2 
        when sort_nr = 2 then 3 
        when sort_nr = 3 then 4 
        when sort_nr = 4 then 5 
        else sort_nr 
       end 
where sort_nr in (2,3,4,5); 

的情況下,else部分不stricly必要。但是如果你忘記where子句,它會防止意外的錯誤更新。

下面是一個SQLFiddle例如:http://sqlfiddle.com/#!4/52d50/1

+0

不會第二次「時」,雖然發現2分的結果嗎?所以它會設置舊的5 = 3,然後是新的3 = 4,最後我會得到5個? – Solid1Snake1

+0

@ Solid1Snake1:no使用更新前的值*評估when中的條件。 –

+0

謝謝:)現在試試看。 – Solid1Snake1