我正在使用oracle 10g,我有一个返回数据列表的查询。我需要逐个更改结果列表的顺序。以下是我需要的一个例子:
订单更改前:
id | name
1 | name1
2 | name2
3 | name3
4 | name4
5 | name5
订单更改后:
id | name
2 | name2
1 | name3
4 | name4
3 | name3
5 | name5
换句话说,我希望将奇数索引处的数据与偶数索引处的数据进行交换。做这种工作有什么命令吗?
答案 0 :(得分:1)
我认为,简单的方法是使用分析函数row_number
select *
from (select id, name, row_number() over(order by id) rn
from (select level id, 'name' || level name
from dual
connect by level <= 20)
order by rn)
order by decode(mod(rn, 2), 0, rn - 2, rn)