现数据库有一个表 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怎么写,希望大虾给点提示,谢谢!
现在纪录如下:
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怎么写,希望大虾给点提示,谢谢!
解决方案 »
- Oracle查询五个表的SQL语句
- oracle 的 ODBC 连接不上
- 大家好,orace的分页sql如何写,在mysql里面是limit 0,5,orace是怎么写的?
- HP-UNIX小机oracle11g安装在哪里?
- 【求助】排序后分页的效率问题
- 编译一过程时,出现PLS-00103错误,怎么解决?
- 关于oracle中使用聚合函数
- 谁能给我一个win2000下oracle817的性能优化方案,100分送上
- ???????????????????????????????????
- 有没有朋友做过oracle主从配置,最好有详细文档
- 问几个简单的SQL语句在ORACLE中怎么写,如去空格、截取、日期字段比较,?
- oracle 查询问题?
(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
)
UPDATE SET ITEM = ROWNUM WHERE INV_NO = 'XXX'
如果很多的话,可以用过程实现,如果是9i可能有更好的办法
(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
)
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;
按上面的脚本执行就可以了
from INVOICE i2 where i1.INV_NO=i2.INV_NO);