这个语句的描述是这样:有一个表 test 字段 id ,come, pid ;现在id自动生成, pid为空,想求一个语句能把 pid 的号码从 0 往下排 。注意 pid和id一点关系没有。
不能写 update test set pid = id+1 或者-1之类的。 因为pid 和id 一点关系都没有。。 怎么写那个语句。
------------------------------------
id come pid
1 2.00
2 2.00
3 2.00
4 2.00
5 2.00
6 2.00
7 2.00
8 2.00
9 2.00 谢谢了先
不能写 update test set pid = id+1 或者-1之类的。 因为pid 和id 一点关系都没有。。 怎么写那个语句。
------------------------------------
id come pid
1 2.00
2 2.00
3 2.00
4 2.00
5 2.00
6 2.00
7 2.00
8 2.00
9 2.00 谢谢了先
SQL> with test as
2 (
3 select 1 id ,2.00 come,null pid from dual union all
4 select 2 id ,2.00 come,null pid from dual
5 )
6 select t.id,t.come,lag(id,1)over(order by t.id) pid from test t
7 ; ID COME PID
---------- ---------- ----------
1 2
2 2 1SQL>
SQL> with test as
2 (
3 select 1 id ,2.00 come,null pid from dual union all
4 select 2 id ,2.00 come,null pid from dual
5 )
6 select t.id,t.come,lag(id,1)over(order by t.id) pid from test t
7 ; ID COME PID
---------- ---------- ----------
1 2
2 2 1SQL>
select id ,come ,row_number() over(order by id) - 1 pid from tb
-------修改下
SQL>
SQL> with test as
2 (
3 select 1 id ,2.00 come,null pid from dual union all
4 select 2 id ,2.00 come,null pid from dual
5 )
6 select t.id,t.come,nvl(lag(id,1)over(order by t.id),0) pid from test t
7 ; ID COME PID
---------- ---------- ----------
1 2 0
2 2 1SQL>
SELECT * FROM test;
ID COME PID
----------------------
1 2
2 2
3 2
4 2
5 2
6 2
7 2
8 2
9 2 UPDATE test SET pid=ROWNUM-1 ; SELECT * FROM test;
ID COME PID
----------------------
1 2 0
2 2 1
3 2 2
4 2 3
5 2 4
6 2 5
7 2 6
8 2 7
9 2 8