用游标实现的累计金额问题

本文介绍了一种使用SQL游标实现累计金额的方法,并对比了非游标方式的实现。通过创建临时表和更新操作,展示了如何利用游标逐条处理数据并更新累计值。

--用游标实现的累计金额问题


--声明2个变量
declare @id int 
declare @num float
declare @num2 float
declare @sum float
CREATE TABLE [dbo].[a] (
 [id] [int] IDENTITY (1, 1) NOT NULL ,
 [num] [float] NULL ,
 [num2] [float] NULL
) ON [PRIMARY]
GO

set @sum =0
--声明一个游标mycursor,select语句中参数的个数必须要和从游标取出的变量名相同
declare mycursor cursor
for select [id],num,num2 from a
--打开游标
open mycursor
--从游标里取出数据赋值到我们刚才声明的2个变量中
fetch next from mycursor into @id,@num,@num2
--判断游标的状态
while (@@fetch_status=0)
begin
 set @sum = @sum + @num
 UPDATE A SET num2 = @sum where [id]=@id
--用游标去取下一条记录  
fetch next from mycursor into @id,@num,@num2
end
close mycursor
deallocate mycursor
select [id],num,num2 from a
GO


--不用游标用查询
select [id],num,num2 into [#temp] from a
select [id],num,num2 = num + isnull((select sum([num]) from [#temp] where a.[id]>[id]),0) from a
drop table [#temp]

转载于:https://www.cnblogs.com/reommmm/archive/2009/03/20/1417831.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值