有一张合同表结构如下:
表名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要按照这种方式把应收款的结果算出来,我上面列的是算法,我希望能把结果算出来放在应收款那里,谢谢!!!

解决方案 »

  1.   

    如果使用的是sql2005 的话,可以考虑使用with 来做。
      

  2.   


    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