私は次の表を持っています
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
変更を 1 にicatcode
設定する必要があります。slno
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」を使用してのみ解決する必要があります。