现数据库有一个表 INVOICE  其中有两字段INV_NO(nvarchar)和ITEM (INT)
现在纪录如下:
INV_NO   ITEM                   INV_NO   ITEM 
000001    1                          000001    1  
000001    2                          000001    2
000002    3        UPDATE为          000002    1   
000003    4                          000003    1 
000003    5                          000003    2
000003    6                          000003    3
也就是把INV_NO相同的ITEM从1开始自加
现在一点头绪都没有,请问用PL/SQL怎么写,希望大虾给点提示,谢谢!

解决方案 »

  1.   

    INSERT  INTO INVOICE  
       (INV_NO,ITEM)   (select a.INV_NO,MOD(ROWNUM-1,a.cnt)+1 cnt2
         from 
          (
          select t.INV_NO,count(*) over(partition by t.INV_NO) cnt 
          from add_mst t
          order by add_kbn
          ) a
         order by add_kbn,MOD(ROWNUM-1,a.cnt)+1
       )
      

  2.   

    如果inv_no数值不多的话,可以这样
    UPDATE SET ITEM = ROWNUM WHERE INV_NO = 'XXX'
    如果很多的话,可以用过程实现,如果是9i可能有更好的办法
      

  3.   

    不好意思,直接插入不行,用update把select 的字段插入
      

  4.   

    再改点查询:
       (select a.INV_NO,MOD(ROWNUM-1,a.cnt)+1 cnt2
         from 
          (
          select t.INV_NO,count(*) over(partition by t.INV_NO) cnt 
          from INVOICE t
          order by INV_NO
          ) a
         order by INV_NO,MOD(ROWNUM-1,a.cnt)+1
       )
      

  5.   

    create table tab1 as
    select * from  INVOICE;truncate table  INVOICE;select INV_NO, row_number() over(partition by INV_NO order by INV_NO) ITEM
    from  tab1;commit;drop table tab1;
    按上面的脚本执行就可以了
      

  6.   

    update INVOICE i1 set ITEM=(select INV_NO, row_number() over(partition by INV_NO order by INV_NO) ITEM
    from  INVOICE i2 where i1.INV_NO=i2.INV_NO);