SqlServer 用游标方式 获取总计累计到某个值/数字 的结果集

文章详细描述了如何通过SQL查询和游标操作,针对GroupName=1和2的分组,累计TotalAmount表中金额,当累计金额不超过100时,将符合条件的记录存储在临时表中。最后展示了查询结果和临时表结构。
摘要由CSDN通过智能技术生成

数据表准备:


情况1:GroupName=1 获取累计 未超过 100 的记录  SQL 和 结果 图 如下:

情况2:GroupName=2 获取累计 未超过 100 的记录  SQL 和 结果 图 如下:

附录:
SQL 文本
 

---------------- 自定义 Start
-- 累计总计
DECLARE @TempTotal  decimal(18,5)
SET @TempTotal = 0

--  目标总计
Declare @TargetTotal decimal(18,5)
SET @TargetTotal = 100

-- 定义临时表 来接收 未超 金额的数据
create table  ##t(TempId  int ,TempAmount decimal(18,5))
---------------- 自定义 End

DECLARE @id INT; -- 定义存放ID的变量
 
DECLARE cursor_name CURSOR FOR SELECT Id FROM TotalAmount where 0=0 AND GroupName = 2; -- 创建游标对象并选取表中的所有ID字段

OPEN cursor_name; -- 打开游标
FETCH NEXT FROM cursor_name INTO @id; -- 获取下一行记录的ID值
 
WHILE  @@FETCH_STATUS = 0  --  当游标状态为成功时,说明还有未被提取完的记录
BEGIN
	-- 这里写需要重复执行的逻辑操作,可以根据@id进行相应的查询或更新操作    

	-- 把金额累计 到 TempTotal
	SELECT @TempTotal = @TempTotal + T1.MyAmount FROM TotalAmount T1 WHERE Id = @id 
	-- 累计金额 小于 等于 目标金额时 则加入 临时表
	IF @TempTotal <= @TargetTotal
	BEGIN 
		insert  ##t  select Id,MyAmount from TotalAmount where Id = @id 
		print @TempTotal
		print 'Id:' + convert(varchar(100), @id)
	END

   FETCH NEXT FROM cursor_name INTO @id; -- 获取下一行记录的ID值
END
CLOSE cursor_name; -- 关闭游标
DEALLOCATE cursor_name; -- 删除游标对象

SELECT * FROM ##t
drop   table  ##t

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安得权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值