select 日期,收入,支出,(select sum(收入)-sum(支出)  from 表 a where a.日期<=b.日期) 余额 from 表 b

解决方案 »

  1.   

    请问“select 日期,收入,支出,(select sum(收入)-sum(支出)  from 表 a where a.日期<=b.日期) 余额 from 表 b”中的“(select sum(收入)-sum(支出)  from 表 a where a.日期<=b.日期)”这一句做何解释?而怎么将
    03-03和03-04两行显示?
      

  2.   

    select 收入,支出,余额 as 收入-支出 
    from 表
      

  3.   

    “(select sum(收入)-sum(支出)  from 表 a where a.日期<=b.日期)"
    计算今天的余额 , 就是用今天以前的(包括扩今天)的收入减去支出。
      

  4.   

    write a stored procedure
    declare @dtmin datetime, @dtmax datetimeselect @dtmin = min(日期) from #b
    select @dtmax = max(日期) from #bselect * into #b2 from #bset @dtmin = dateadd(day,1,@dtmin)
    while @dtmin < @dtmax
    begin
      if not exists (select * from #b where 日期 = @dtmin)
        insert into #b2 values(@dtmin,0,0)
      set @dtmin = dateadd(day,1,@dtmin)
    endselect 日期,收入,支出, (select sum(收入)-sum(支出) from #b2 t1 where t1.日期 <=t2.日期) 余额
    from #b2 t2
    order by 日期
      

  5.   

    declare @ table (日期 datetime,收入 int,支出 int)
    insert @ values ('2002-03-01',50 ,             20)
    insert @ values ('2002-03-02',       20      ,        45)
    insert @ values ('2002-03-05',       5        ,       10)select top 100 IDENTITY(int,0,1) id into # from sysobjects a,sysobjects b
    select c.日期,isnull(b.收入,0) 收入,isnull(b.支出,0) 支出,(select sum(收入)-sum(支出)  from @ a where a.日期<=c.日期) 余额 from @ b full join
    (select dateadd(day,id,mi) 日期 from (select  max(日期) ma,min(日期) mi from @) a,# where dateadd(day,id,mi)<=ma) c
    on b.日期=c.日期drop table #
      

  6.   

    都做过了,显然都用到了存储过程和临时表,太复杂了,是否有必要?我想,直接做一个视图。请问楼主,能否得到一个唯一表示顺序的字段?
    因为现在的情况是:先要判断日期,如果有两条日期相同的record再判断id,然后才能得出balance。如果只有一个唯一表示顺序的字段,一条非常简单的sql就可以完成该要求
      

  7.   

    其实这中间就是多了两条2002-03-03和2002-03-04的记录
    看来是不能用一条SQL语句实现了?
    谢谢各位大虾的意见!!!
      

  8.   

    select l.日期,l.收入(元),l.支出(元)
    , sum(r.收入 ) -sum(r.支出 )as 余额(元)
    from table l
    join table r
    on l.日期 >= r.日期 
    group by l.日期,l.收入(元),l.支出(元)