想用一条SQL语句 算出合计

原表:
日期 支出
4-12 100
4-13 300
4-13 400
4-14 200

我想要的结果是
日期 支出 累计支出
4-12 100 100
4-13 300 400
4-13 400 800
4-14 200 1000

我将你的表在数据库中建了试了下,首先有个问题是日期有两个相同的会出问题(因为不知道你的主键是什么)所以我将两个相同日期改成了不同的你看看结果除了两个4-13其它都没问题。如果你一定要两个4-13的话,建议你把表的结果优化下,加个主键。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-19
确实必须要一个序号才行,我不知道你是什麽数据库,SQLSERVER可以试试这个
设表名tab1:
select 日期,支出,row_number()over (order by 日期)as row_no into #temp from tab1
select 日期,支出,(select sum(支出) from #temp where row_no<=a.row_no) as 累计支出 from #temp a
也可以这样试试:
select identity(int,1,1) as row_no,日期,支出 into #temp from tab1
select 日期,支出,(select sum(支出) from #temp where row_no<=a.row_no) as 累计支出 from #temp a
第2个回答  2012-04-19
只能多加一个id号才行。
原因:sql 关系型数据库,理论是集合论。在集合论里,记录是不分前後的。
你的日期有重复,而同一天的加总又不一样,所以不能用日期来处理。
必须有一个明确的字段来确定前後顺序。否则累加会有问题。

加一个唯一字段示例如下:

create table #aa(id int identity(1,1),dt datetime,pay int)
go
insert into #aa(dt,pay)values('2012-4-12',100)
insert into #aa(dt,pay)values('2012-4-13',300)
insert into #aa(dt,pay)values('2012-4-13',400)
insert into #aa(dt,pay)values('2012-4-14',200)
go

select * from #aa
go
select id,dt,pay,(select sum(pay) from #aa where id<=a.id) from #aa a
go
第3个回答  2012-04-19
假设原表 叫table
select t1.日期,t1.支出,sum(t2.支出)
from table t1,table t2
where t2.日期<=t1.日期
第4个回答  2012-04-19
select 日期,支出,(select sum(支出)
from table
where 支出<=T.支出) as 累计支出
from table as T
group by 累计支出
第5个回答  2012-04-19
select tb0.日期,tb0.支出,(select sum(tb1.支出) from table tb1 where tb1.日期<=bt0.日期) as 累计支出
from table tb0
相似回答