RT假如有表A
id     number
------------------
T1      20010302
T1      20100404
T1      20081230
T2      20040512
T2      20071103
........
想把这个A表的数据写进到B表,其中ID字段不变,后面那个日期字段以ID为准,按照日期(number类型的日期)的大小顺序转成1,2,3等,换了一个ID又是新的1,2,3
如下:
表B
id      num
---------------
T1       1
T1       3
T1       2
T2       1
T2       2
请问怎么转才可以高效的把A转进B呢,我试过之后用游标更新和写函数在select语句里,但是速度都非常慢,求高效方法,谢谢啦

解决方案 »

  1.   

    insert into b(id,num)
    select id,row_number() over(partition by id order by number)
    from a
      

  2.   


    哟   第一次见这个东西   row_number() 是什么咧?
      

  3.   


    create table t(
           t_id varchar2(4),
           t_number number(12));
    insert into t
    select 'T1',20010302 from dual union all
    select 'T1',20100404 from dual union all
    select 'T1',20081230 from dual union all
    select 'T2',20040512 from dual union all
    select 'T2',20071103 from dual
    --
    insert into b(t_id,t_number)
    select t_id,row_number() over(partition by t_id order by t_number)
    from t;
    --
    SQL> select * from b;T_ID      T_NUMBER
    ---- -------------
    T1               1
    T1               2
    T1               3
    T2               1
    T2               2
      

  4.   

    谢谢大家,已经解决了,果然CSDN高人很多呀