I have the following table
+-------+-------+----------+------+
| 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 |
+-------+-------+----------+------+
I need to update the slno column using a cursor. The o/p should be the following table ie., when the icatcode is same it should increment the slno and when icatcode changes it should set the slno to 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 |
+-------+-------+----------+------+
I have written the query for it
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
The above query results the following 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 |
+-------+-------+----------+------+
What changes do I need to do so that I will get the desired o/p? I need to do this only by using cursors.
In SQLServer you can try this
Demo on SQLFiddle