`
逆风的香1314
  • 浏览: 1416016 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

先进先出的还款处理触发器

Go 
阅读更多

有 两个表:表1:借支
姓名   日期   借支单号     借支金额     已还金额     未还余额
张三  99-1-1  000001      10000          0           10000
李四  99-1-2  000002      5000           0           5000
张三  99-2-1  000003      6000           0           6000
张三  99-3-1  000004      10000          0           15000
...    ...      ...        ...          ..         .....
表2:还款
姓名   日期    还款单号     还款金额   

当表2 输入单据时,表1 的“已还金额”“未还余额”根据表2的输入“还款金额”做相应更改。即:
表2:还款
姓名   日期    还款单号     还款金额  
张三   99-4-3   000001      13000
 
表1:借支
姓名   日期   借支单号     借支金额     已还金额     未还余额
张三  99-1-1  000001      10000          10000        0
李四  99-1-2  000002      5000           0           5000
张三  99-2-1  000003      6000           3000        3000
张三  99-3-1  000004      10000          0           15000
...    ...      ...        ...          ..         .....
表2再输入时:
姓名   日期    还款单号     还款金额  
张三   99-4-3   000001      13000
张三   99-4-3   000002      8000
表1为:
表1:借支
姓名   日期   借支单号     借支金额     已还金额     未还余额
张三  99-1-1  000001      10000          10000        0
李四  99-1-2  000002      5000           0           5000
张三  99-2-1  000003      6000           6000        0
张三  99-3-1  000004      15000          5000        10000
...    ...      ...        ...          ..         .....

 

---------------------------------------------------------------------------

--测试

--测试数据
create table 表1(姓名 varchar(10),日期 datetime,借支单号 char(6),借支金额 int,已还金额 int,未还余额 int)
insert 表1 select '张三','99-1-1','000001',10000,0 ,10000
union  all select '李四','99-1-2','000002',5000 ,0 ,5000
union  all select '张三','99-2-1','000003',6000 ,0 ,6000
union  all select '张三','99-3-1','000004',15000,0 ,15000 --楼主原来这个数据应该不对

create table 表2(姓名 varchar(10),日期 datetime,还款单号 char(6),还款金额 int)
go

--处理的触发器
create trigger tr_insert on 表2
for insert
as
update a set
 已还金额=case when (
   select sum(case when 已还金额>0 then 未还余额 else 借支金额 end)
   from 表1
   where 未还余额>0 and 姓名=a.姓名 and 借支单号<=a.借支单号
  )>a.未还余额 then b.还款金额-isnull((
   select sum(case when 已还金额>0 then 未还余额 else 借支金额 end)
   from 表1
   where 未还余额>0 and 姓名=a.姓名 and 借支单号<a.借支单号<br>  ),0)+isnull(a.已还金额,0)
  else a.借支金额 end
 ,未还余额=case when (
   select sum(case when 已还金额>0 then 未还余额 else 借支金额 end)
   from 表1
   where 未还余额>0 and 姓名=a.姓名 and 借支单号<=a.借支单号
  )>a.未还余额 then a.借支金额-(b.还款金额-isnull((
   select sum(case when 已还金额>0 then 未还余额 else 借支金额 end)
   from 表1
   where 未还余额>0 and 姓名=a.姓名 and 借支单号<a.借支单号<br>  ),0)+isnull(a.已还金额,0))
  else 0 end
from 表1 a,inserted b
where a.未还余额>0 and a.姓名=b.姓名  and isnull((
  select sum(case when 已还金额>0 then 未还余额 else 借支金额 end)
  from 表1
  where 未还余额>0 and 姓名=a.姓名 and 借支单号<a.借支单号<br> ),0)<=b.还款金额
go

--插入记录测试
insert 表2 select '张三','99-4-3','000001',13000
--显示处理结果
select * from 表1
select * from 表2

--插入记录测试
insert 表2 select '张三','99-4-3','000002',8000
--显示处理结果
select * from 表1
select * from 表2
go

--删除测试
drop table 表1,表2

/*--测试结果

--第一次插入记录的更新结果:

姓名   日期                       借支单号  借支金额   已还金额  未还余额 
------ ------------------------- --------- --------- --------- ----------
张三   1999-01-01 00:00:00.000    000001   10000     10000     0
李四   1999-01-02 00:00:00.000    000002   5000      0         5000
张三   1999-02-01 00:00:00.000    000003   6000      3000      3000
张三   1999-03-01 00:00:00.000    000004   15000     0         15000

(所影响的行数为 4 行)

姓名   日期                       还款单号   还款金额 
----- -------------------------- --------- -----------
张三   1999-04-03 00:00:00.000    000001    13000

(所影响的行数为 1 行)

 

--第二次插入的结果:

姓名   日期                       借支单号   借支金额  已还金额  未还余额
------ ------------------------------------ --------- -------- --------
张三   1999-01-01 00:00:00.000    000001    10000     10000     0
李四   1999-01-02 00:00:00.000    000002    5000      0         5000
张三   1999-02-01 00:00:00.000    000003    6000      6000      0
张三   1999-03-01 00:00:00.000    000004    15000     5000      10000

(所影响的行数为 4 行)

姓名   日期                       还款单号   还款金额 
------ ------------------------- ---------- ----------
张三   1999-04-03 00:00:00.000    000001    13000
张三   1999-04-03 00:00:00.000    000002    8000

(所影响的行数为 2 行)

--*/

分享到:
评论

相关推荐

    企业财务管理--借还款业业务账务处理系统

    企业财务管理--借还款业业务账务处理系统 部门借还款财务系统分析 一:财务借还款分析: 1, 借款,借款人从财务借款,财务录入凭证操作:借:其他应收款 贷:现金 2, 报销一:单据金额大于借款金额:借款人报销时...

    银行贷款还款计划书范本新.doc

    2. 提高贷款效率:贷款还款计划书能够提高银行贷款的效率,减少贷款处理时间。 对借款人而言,贷款还款计划书能够: 1. 明确还款计划:贷款还款计划书能够帮助借款人明确还款计划,避免还款延迟带来的经济损失。 2...

    延期还款协议书.doc

    3. **延期原因**:协议书中应明确列出导致延期还款的具体原因,以证明借款方的困难是暂时性的。 4. **延期后的还款安排**:新设定的还款日期、还款计划以及可能调整的利率等条款。这部分内容需经过贷款方和借款方...

    信用卡还款系统

    JSP在客户端呈现静态内容,而在服务器端处理动态逻辑,如用户输入的信用卡信息验证、账单计算和还款操作。 系统后端数据存储则依赖于微软的数据库技术,这可能指的是Microsoft SQL Server,一个广泛使用的商业关系...

    房贷提前还贷缩短日期计算器(excel精简版,适用于多次提前还款)

    适用于大部分人的极简等额本息贷款提前还款计算器,仅需输入提前还款后剩余未还本金(剩余欠款)、目前月供数、年化贷款利率及提前还款生效年月等参数,即可同步得知因提前还款缩短后的最后还款年月时间。...

    最新还款计划书是电子版的商业还款计划书通用版示范word文档.docx

    接着,还款计划书会列出详细的还款安排,通常分为多期进行,每期的还款日期和金额都需详细列明,如文中所示的四期还款。这有助于债务人根据自身的财务状况合理规划偿还节奏,并给予债权人明确的预期。同时,为了避免...

    最新工地还款计划书范本工程还款计划书通用版WORD范本可编辑.docx

    【工程还款计划书详解】 在建筑工程领域,资金的流转至关重要,尤其当项目遇到困难时,可能会需要借款来维持运营。此时,制定一份清晰、具体的还款计划书就显得尤为重要。还款计划书是债务人向债权人表明还款意愿和...

    农行提前还款申请书.pdf

    根据文件“农行提前还款申请书.pdf”的标题、描述和提供的部分文字内容,我们可以提炼出以下知识点: 1. 文档性质:这是一份关于向农业银行提交的提前还款申请书,属于银行业务范畴内的金融文件。 2. 申请书目的:...

    贷款还款计算程序

    使用JAVA写的计算贷款还款每月明细的小程序

    还款协议书.docx

    5. **争议管辖权**:协议书规定任何争议将由甲方所在地的人民法院管辖,这是为了确定法律纠纷的处理地点,有利于甲方的权益保护。 6. **协议生效条件**:协议在甲、乙双方签字后生效,意味着双方都同意并承诺遵守...

    最新申请分期还款申请书中国银行还款申请书WORD可编辑.docx

    【知识点详解】 1. 分期还款申请:分期还款是一种金融工具,允许借款人将大笔债务分摊到多个较短的时间段内偿还,通常伴随着...同时,它也提醒用户在处理金融事务时要谨慎对待文档和合同,充分了解并遵守相关法规。

    房贷还款计算器.zip

    房贷还款计算器是一款用于计算个人或企业偿还房屋贷款的工具,其核心功能是根据用户输入的贷款金额、贷款期限、年利率等关键参数,预测出每月的还款额以及在整个贷款周期内的总利息支出。这款计算器通常以HTML页面的...

    买房贷款还款剩额详细计算器

    3. **剩余本金查询**:在贷款过程中,如果想了解还款一段时间后剩余的贷款本金,只需输入已还款月数,计算器会即时给出答案,方便用户调整还款计划。 二、房贷计算器的原理 房贷还款主要遵循等额本息还款法或等额...

    最新借呗还款计划XX行贷款还款计划书通用版WORD格式模板.docx

    文档的【部分内容】详细列出了还款计划书的结构和主要内容,主要包括以下几个知识点: 1. **借款背景**:模板中提到借款方因“完善工程的______设施及______建设”需要向银行借款。这提醒我们在撰写还款计划书时,...

    还款计划生成系统

    一款用于还款计划自动生成,贷款记录建立及查询的免费软件。主要功能可分为新建还款任务、历史记录搜索、到期合同查询. 通过新建还款任务可以增加新的客户资料及贷款记录,并可以生成还款计划表(excel文件). 通过...

    国家助学贷款还款确认书.pdf

    5. 还款计划书:这部分列出了具体的还款时间表,按照合同号和不同的还款时间段,规划了借款人未来应还贷款的详细计划。 6. 签名与日期:确认书的最后,借款人需要签名并按手印,以证明其对所有信息的确认和对还款...

    按揭贷款计算器“等额本息还款法”和“等额本金还款法”

    `System.Drawing`和`System.Windows.Forms`命名空间来处理打印及用户界面交互。同时,利用数学公式和循环结构实现复杂的金融计算。 总的来说,这个按揭贷款计算器项目涵盖了基础的C#编程技术、金融计算算法以及文件...

    花呗如何用手机还款?手机还款方法.docx

    输入密码并验证成功后,系统会立即处理你的还款请求,一旦还款成功,你将在账单中看到相应的还款记录,同时,花呗的待还款余额会相应减少。 8. **查看还款结果** 返回花呗页面,你可以看到最新的账单状态,确认已...

Global site tag (gtag.js) - Google Analytics