我想使用“单个游标”比较当前行和上一行,并更新sql中的行

时间:2013-03-02 06:13:10

标签: sql cursor cursor-position

我有下表

icode    iname   icatcode      slno
10           a      11            0
20           b      31            0
30           c      11            0
40           d      21            0
50           e      31            0
60           f      11            0
70           g      21            0
80           h      41            0

我需要使用cursor更新slno列。

输出应该是下表,即当icatcode相同时,它应该增加slno&如果icatcode更改,则应将slno设置为1

icode    iname   icatcode      slno
10           a             11            1
30           b             11            2
60           c             11            3
70           d             21            1
40           e             21            2
50           f             31            1
20           g             31            2
80           h             41            1

我已经为它编写了查询

declare @icode int,@iccode int, @islno int,@inccode int
set @islno=1
declare cur2 cursor for select icode,iccode from im
order by iccode
open cur2
fetch next from cur2 into @icode,@iccode
while @@FETCH_STATUS=0
begin
    update im  set slno=@islno where @icode=icode
    fetch next from cur2 into @icode,@inccode
    if @iccode<>@inccode
    begin
    set @islno=1
    end
    else
    begin
    set @islno=@islno+
    end
end
close cur2
deallocate cur2

以上查询会产生以下输出

icode    iname   icatcode      slno
10           a             11            1
20           b             31            1
30           c             11            2
40           d             21            1
50           e             31            1
60           f             11            3
70           g             21            1
80           h             41            1

我需要进行哪些更改才能获得所需的输出?

注意:我们应该只使用sql 2008中的“CURSORS”来解决这个问题

0 个答案:

没有答案