0

我有下表

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

我需要slno使用游标更新列。

输出应该是下表,即,当它相icatcode同时,它应该增加slno& wen的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”来解决这个问题

4

0 回答 0