比如当月有有5条记录,我要显示这个月1号到30号的所有记录最后得到的结果是30条,不是10条(见下表)
序号   金额  添加时间   用出时间  状态(是否已用)
 1     100   2012-6-1      null         0
 2     300   2012-6-3      null         0
 3     100   2012-6-5   2012-6-6        0
 4     100   2012-6-5      null         0
 5     100   2012-6-8      null         0我想得到这个表
时间        到今天为止未用金额
2012-6-1           100
2012-6-2           100
2012-6-3           400
2012-6-4           400
2012-6-5           600
2012-6-6           500
2012-6-7           500
2012-6-8           600
........我该怎么做..

解决方案 »

  1.   

    --构建示例数据
    create table #ta(序号 int, 金额 int, 添加时间 datetime, 用出时间 datetime,  状态 bit)
     insert into #ta select 1, 100, '2012-6-1', null, 0
      union all select 2, 300, '2012-6-3', null, 0
      union all select 3, 100, '2012-6-5', '2012-6-6', 1
      union all select 4, 100, '2012-6-5', null, 0
      union all select 5, 100, '2012-6-8', null, 0--创建函数
    Create function dbo.fn_MonthList(@s as datetime) returns table
    as
    return
    with CET1 AS
    (SELECT dateadd(dd, number , convert(char(6),@s,112)+'01')AS T
    FROM master..spt_values where type='p'
    and number < day(dateadd(mm,1,@s)-day(@s)) 
    )SELECT * FROM CET1
    GO--演示解决方案
    ;with qq AS(select T, 金额 from dbo.fn_MonthList1('2012-06-09') a left join #ta b on b.添加时间 = a.T and 状态 <> 1)
    SELECT  CONVERT(CHAR(10),O1.T,120) 时间, SUM(O2.金额) AS 到今天为止未用金额
    FROM qq AS O1
      JOIN qq AS O2
        ON O2.T <= O1.T
    GROUP BY  O1.T, O1.金额
    ORDER BY  O1.T;
    /*时间         到今天为止未用金额
    ---------- -----------
    2012-06-01 100
    2012-06-02 100
    2012-06-03 400
    2012-06-04 400
    2012-06-05 500
    2012-06-06 500
    2012-06-07 500
    2012-06-08 600
    2012-06-09 600
    2012-06-10 600
    2012-06-11 600
    2012-06-12 600
    2012-06-13 600
    2012-06-14 600
    2012-06-15 600
    2012-06-16 600
    2012-06-17 600
    2012-06-18 600
    2012-06-19 600
    2012-06-20 600
    2012-06-21 600
    2012-06-22 600
    2012-06-23 600
    2012-06-24 600
    2012-06-25 600
    2012-06-26 600
    2012-06-27 600
    2012-06-28 600
    2012-06-29 600
    2012-06-30 600(30 行受影响)
    */
      

  2.   

    额。获得一个月的所有日期同楼上的,select dt,sum(a.money) from fn_getDay('2012-06-01') cross join #ta a where a.Intime<dt and a.state=0 group by dt