一个例子说明啊:
12月31日利率 0.1 (按一年360计息)
1月1日A客户存款10000元整.
2月1日利率上调至0.2
3月1日客户取款时本息合计的公式是:本金+(本金×利率1×天数)+(本金×利率2×天数)
-----------------------------------------------------------
数据库有利率表一张
ID NAME LILV Sdate
1 活期 0.1 2013-12-31
2 活期 0.1 2014-02-01
业务表一张
ID NAME MONEY BDATE TYPEID
1 A客户 10000 2014-01-01 1
2 B客户 5000 2014-02-01 2
----------------------------------------------------------
求问 :这个计算本息的脚本怎么写啊
------解决方案--------------------
drop table #Orders;
drop table #lilv;
with lilv(ID,NAME,LILV,SDate) as (
select 1 ,'活期',0.1,'2013-12-31' union all
select 2 ,'活期',0.2,'2014-02-01'
)select * into #lilv from lilv;
with Orders (ID,NAME,MONEY,BDATE,TYPEID) as
(
select 1,'A客户',10000,'2014-01-01',1 union all
select 2,'B客户',5000 ,'2014-02-01',2 union all
select 3,'C客户',1000 ,'2014-01-11',1 union all
select 4,'D客户',1000 ,'2014-02-11',2
)select * into #Orders from Orders;
declare @EDate date ='2014-03-01';--假设不计算此天的利息
declare @EID int =0;--要求利率表的ID与SDate单调性一致。如果不一致,就要自己排序了,且不能用ID了。
select top 1 @EID=Id from #lilv where SDate<@EDate order by SDate desc;
--print @EID;
with t as (
select o.*,l.LILV,case when l.SDate<o.BDATE then o.BDATE else l.SDate end SDate,isnull((select top 1 SDate from #lilv l2 where l2.ID>l.ID order by l.ID),@EDate) EDate
from #Orders o
cross apply (select * from #lilv where ID between o.TYPEID and @EID) l
)
select
ID,NAME,MONEY,t.MONEY+SUM(t.MONEY*LILV/100.0*DATEDIFF(DD,SDate,EDate)) MONEY2
from t
group by ID,NAME,MONEY