这个语句的描述是这样:有一个表 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 谢谢了先

解决方案 »

  1.   


    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> 
      

  2.   


    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> 
      

  3.   

    用row_numberselect id ,come ,row_number() over(order by id) pid from tb
      

  4.   

    从 0 往下排?
    select id ,come ,row_number() over(order by id) - 1 pid from tb
      

  5.   

     UPDATE test SET pid=ROWNUM-1 ;
      

  6.   


    -------修改下
    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> 
      

  7.   


      
    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
      

  8.   

    update test set pid=rownum-1
      

  9.   

    UPDATE test SET pid=ROWNUM-1 ;   好像不行啊 这个语句执行起来就不动了oracle 的plsql 一直就处于运行状态。不动了。