我有下表
+-------+-------+----------+------+
| 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列。o/p 应如下表所示,即,当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
上面的查询结果如下 o/p
+-------+-------+----------+------+
| 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 |
+-------+-------+----------+------+
我需要做哪些更改才能获得所需的 o/p?我只需要使用游标来做到这一点。