我使用的是oracle数据库,一个表中存在若干条数据,可能没有id列。1.先从该表中抽取数据并按照指定的顺序排序;
2.以4条数据为一组,将4条中的2,3位置的数据颠倒位置。(若总条数对4取的余数大于等于三,那么2的操作就执行);
3.获得新的排序结果。ps:有没有可能仅仅用sql语句完成上面的需求?望各位给小弟些指点,谢谢啦~~~
2.以4条数据为一组,将4条中的2,3位置的数据颠倒位置。(若总条数对4取的余数大于等于三,那么2的操作就执行);
3.获得新的排序结果。ps:有没有可能仅仅用sql语句完成上面的需求?望各位给小弟些指点,谢谢啦~~~
from (select w.*,row_number() over(order by column) rn from table w) t
order by case
(
select ename,job,sal,mod(rn+1,4) as rn1,rn rn from
(select ename,job,sal,rownum rn from emp e )
)
order by old_rn
可以4个分组实现2,3调换
测试数据创建的话很简单,
create table test (test number(10));
insert into test(test)
values
(1);
insert into test(test)
values
(2);
insert into test(test)
values
(3);
insert into test(test)
values
(4);
insert into test(test)
values
(5);
insert into test(test)
values
(6);
insert into test(test)
values
(7);
insert into test(test)
values
(8);
insert into test(test)
values
(9);
insert into test(test)
values
(10);目前表中的数据就是1,2,3,4,5,6,7,8,9,10
想要得到的结果就是1,3,2,4,5,7,6,8,9,10
若表中的数据为:1,2,3,4,5,6,7,8,9,10,11
想要得到的结果就是:1,3,2,4,5,7,6,8,9,11,10那么这样的过程能实现吗?
(
select ename,job,sal,mod(rn-1,4) as rn1,rn rn from
(select ename,job,sal,rownum rn from emp e )
)
order by old_rn结果如下:
ENAME SAL NEW_RN OLD_RN
SMITH 800.00 1 1
ALLEN 1600.00 3 2
WARD 1250.00 2 3
JONES 2975.00 4 4
MARTIN 1250.00 5 5
BLAKE 2850.00 7 6
CLARK 2450.00 6 7
SCOTT 3000.00 8 8
KING 5000.00 9 9
TURNER 1500.00 11 10
ADAMS 1100.00 10 11
JAMES 950.00 12 12
FORD 3000.00 13 13
MILLER 1300.00 15 14
杨 6080.00 14 15
liping 5000.00 16 16
YA_PING 4000.00 17 17
杨平 6080.00 19 18
(
select mod(rn-1,4) as rn1,rn rn from
(select rownum rn from emp where rownum<17 )
)
order by old_rn
结果怎么不是了啊
我汗.....
NEW_RN OLD_RN
1 1
3 2
2 3
4 4
5 5
7 6
6 7
8 8
9 9
11 10
10 11
12 12
13 13
15 14
14 15
16 16