请问“select 日期,收入,支出,(select sum(收入)-sum(支出) from 表 a where a.日期<=b.日期) 余额 from 表 b”中的“(select sum(收入)-sum(支出) from 表 a where a.日期<=b.日期)”这一句做何解释?而怎么将 03-03和03-04两行显示?
select 收入,支出,余额 as 收入-支出 from 表
“(select sum(收入)-sum(支出) from 表 a where a.日期<=b.日期)" 计算今天的余额 , 就是用今天以前的(包括扩今天)的收入减去支出。
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 日期
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 #
03-03和03-04两行显示?
from 表
计算今天的余额 , 就是用今天以前的(包括扩今天)的收入减去支出。
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 日期
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 #
因为现在的情况是:先要判断日期,如果有两条日期相同的record再判断id,然后才能得出balance。如果只有一个唯一表示顺序的字段,一条非常简单的sql就可以完成该要求
看来是不能用一条SQL语句实现了?
谢谢各位大虾的意见!!!
, sum(r.收入 ) -sum(r.支出 )as 余额(元)
from table l
join table r
on l.日期 >= r.日期
group by l.日期,l.收入(元),l.支出(元)