有一张合同表结构如下:
表名pactinfo
ID号 合同名称 合同金额 合同开始时间 合同结束时间
ID pactname amount begintime endtime
1 万科 30000 2008-12-20 2009-12-19现在要统计合同的应收款,结果如下:
时间 应收款
2008-12 30000×(31-20)/365
2009-01 30000×31/365
2009-02 30000×28/365
.
2009-07 30000×24/31要按照这种方式把应收款的结果算出来,我上面列的是算法,我希望能把结果算出来放在应收款那里,谢谢!!!
表名pactinfo
ID号 合同名称 合同金额 合同开始时间 合同结束时间
ID pactname amount begintime endtime
1 万科 30000 2008-12-20 2009-12-19现在要统计合同的应收款,结果如下:
时间 应收款
2008-12 30000×(31-20)/365
2009-01 30000×31/365
2009-02 30000×28/365
.
2009-07 30000×24/31要按照这种方式把应收款的结果算出来,我上面列的是算法,我希望能把结果算出来放在应收款那里,谢谢!!!
create table t_date(id int primary key identity(1,1), pactname varchar(20),amount decimal(10,2),begindate datetime ,enddate datetime)create procedure P_date @begindate datetime ,@enddate datetime ,@amount decimal(10,2)
as
declare @monthb datetime
declare @begin datetime
declare @dateloop varchar(20)
declare @days int
declare @alldays int
create table #t(dates varchar(7),amount decimal(10,2))
set @alldays = datediff(dd,@begindate,@enddate) + 1
set @dateloop = convert(char(7),@begindate,120)
set @begin = @begindate
if convert(char(7),@begindate,120) = convert(char(7),@enddate,120)
insert into #t values(@dateloop,@amount)
else
BEGIN
while @dateloop <= convert(varchar(7),@enddate,120)
begin
set @monthb = convert(datetime,@dateloop+'-01')
set @monthb = dateadd(month,1,@monthb)
set @days = datediff(dd,@begin,@monthb)
insert into #t values(@dateloop,@amount*(@days)/@alldays)
if convert(char(7),@monthb,120) <> convert(char(7),@enddate,120)
begin
set @begin = @monthb
set @dateloop = convert(char(7),@begin,120)
end
else
begin
set @begin = @monthb
insert into #t values(convert(char(7),@begin,120),@amount*(datediff(dd,@begin,@enddate)+1)/@alldays)
BREAK
end
end END
select dates,amount from #t order by dates
declare @date1 datetime
declare @date2 datetime
declare @amount decimal
set @amount = 30000.00
set @date1 = '2008-12-21'
set @date2 = '2009-12-19'
execute test..P_date @date1,@date2,@amount