数据表准备:
情况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