SQL 给出指定的金额什,自动匹配金额明细

本文介绍了一种使用SQL递归查询的方法,来自动找出明细表中能够汇总到特定总金额的行。通过实例演示了如何从一系列明细中筛选出总额为100的明细组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出一个金额值,例100,可以自动找出汇总成100的明细
明细表1
ID  TOTAL
1     20
2     20
3     30
4     50
5     20
6    10
7    30
8    50
顺序从上往下拉,最终结算应该是这样,
ID  TOTAL
1     20
2     20
3     30
5     20
6    10
找出的行数金额加起来是100

---------------------------------------------------------------------
CREATE TABLE [dbo].[Table_A](
    ID int ,TOTAL int
) ON [PRIMARY]
   
GO
   
insert [Table_A]
select 1,20
union select 2,20
union select 3,30
union select 4,50
union select 5,20
union select 6,    10
union select 7,    30
union select 8 ,   50
 
--    序号连续的情况下用这种,如果不连续,可以先用row_number生个个新列
;WITH DEPTS AS(
 -- 定位点成员
 SELECT ID,total,total_s = total,flag = 1 FROM [Table_A] where ID = 1 
 UNION ALL
 -- 递归成员, 通过引用CTE自身与Dept基表JOIN实现递归
 SELECT a.ID,a.total ,total_s = case when total_s + a.total > 100 then total_s else total_s + a.total end 
 ,flag = case when total_s + a.total > 100 then 0 else 1 end 
 FROM [Table_A] A, DEPTS B
 WHERE A.id = B.id + 1
)
SELECT * FROM DEPTS where flag = 1
GO
 
/*
1    20    20    1
2    20    40    1
3    30    70    1
5    20    90    1
6    10    100    1
*/
 
 
DROP TABLE [Table_A];
--------------------- 
作者:leo_lesley 
来源:优快云 
原文:https://blog.youkuaiyun.com/leo_lesley/article/details/80524284 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值