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変更を 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」を使用してのみ解決する必要があります。

4

0 に答える 0