sql中循环处理当前行数据和上一行数据相加减
以下事例,使用游标循环表#temptable中数据,然后让当前行和上一行中的argument1相加存放到当前行的argument2中,比较简单。
--droptable#temptable createtable#temptable ( argument1int, argument2int, argument3datetime ) declare@rowcountint,@argument1int,@argument2nvarchar(50),@argument3datetime set@rowcount=1 set@argument1=1 set@argument2=0 set@argument3=GETDATE() while(@rowcount<100) begin insertinto#temptable(argument1,argument2,argument3) values(@argument1,@argument2,@argument3) set@argument1=@argument1+datepart(day,@argument3) set@argument3=@argument3-1 set@rowcount=@rowcount+1 end --select*from#temptable declare@lastargument2int set@lastargument2=0 set@argument2=0 declare_cursorcursorfor(selectargument1from#temptable) open_cursor; fetchnextfrom_cursorinto@argument2 while@@fetch_status=0 begin update#temptable setargument2=@argument2+@lastargument2 wherecurrentof_cursor set@lastargument2=@argument2 fetchnextfrom_cursorinto@argument2 end close_cursor deallocate_cursor --select*from#temptable
问一个问题:
第一句fetchnextfrom_cursorinto@argument2这句为什么不能放在while循环的第一行,删除第二行呢?我记得自己当时在这里出错了,呵呵。