0

我正在尝试使用 Oracle 做一些 SQL

我有一个包含文本数据的表,以及该文本应如何显示的数字顺序列表,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

有谁知道这样做的好方法?

4

1 回答 1

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部分不是绝对必要的。但是如果你忘记了 where 子句,它可以防止意外的错误更新。

这是一个 SQLFiddle 示例:http ://sqlfiddle.com/#!4/52d50/1

于 2012-11-01T17:14:37.047 回答