日期:2014-05-18 浏览次数:20705 次
--适用于2005-2008+
--> 测试数据: @表A
declare @表A table (KID varchar(5),OPRNUM int,OPRNUMNEXT int)
insert into @表A
select 'K0001',100,200 union all
select 'K0001',200,201 union all
select 'K0001',201,300 union all
select 'K0001',300,400 union all
select 'K0001',400,0 union all
select 'K0003',400,0 union all
select 'K0003',200,201 union all
select 'K0003',100,200 union all
select 'K0003',300,400 union all
select 'K0003',201,300 union all
select 'K0002',100,200 union all
select 'K0002',200,300 union all
select 'K0002',210,400 union all
select 'K0002',300,210 union all
select 'K0002',400,0
;with maco as
(
select row_number() over (partition by KID order by OPRNUM) as rid, *  from @表A
)
update @表A set OPRNUMNEXT=c.OPRNUMNEXT
from @表A a left join (Select a.rid,a.KID,a.OPRNUM,isnull(b.OPRNUM,0) as OPRNUMNEXT  from maco a 
left join maco b on a.KID=b.KID and a.rid=b.rid-1)c
on a.KID=c.KID and a.OPRNUM=c.OPRNUM
select * from @表A order by KID,OPRNUM
/*
KID   OPRNUM      OPRNUMNEXT
----- ----------- -----------
K0001 100         200
K0001 200         201
K0001 201         300
K0001 300         400
K0001 400         0
K0002 100         200
K0002 200         210
K0002 210         300
K0002 300         400
K0002 400         0
K0003 100         200
K0003 200         201
K0003 201         300
K0003 300         400
K0003 400         0
*/