Access查询怎样实现运行累加

日期 摘要 收入 支出 余额

2017/1/1 收 100 100

2017/1/1 收 200 300

2017/1/2 支 50 250

2017/1/2 收 100 350

上述1,2,3,4列是数据表字段,怎样用查询求出余额字段的值,请教高手

首先必须说明一下,对记录行进行累加不应该交给SQL查询来实现,这是一件吃力不讨好的事情。正确的做法是将记录集交给程序性工具来完成,如VBA编程、报表工具、EXCEL电子表格等等,这才是正统的解决方式。

如果一定要用SQL查询实现记录行累加也是可以的,但是有一个前提,那就是记录集的每一行记录都有唯一的标识列,否则无法实现累加。 

下面举一个利用数据表自增ID列实现SQL查询累加的例子供参考(注意尽管可以实现但是它的系统开销是比较大的):

源数据表如图

实现SQL查询语句

SELECT a.id, First(a.日期) AS 日期, 
First(a.摘要) AS 摘要, First(a.收入支出) AS 收入支出, 
Sum(IIf(b.摘要='收',b.收入支出,-1*b.收入支出)) AS 余额
FROM 收支记录 AS a, 收支记录 AS b
WHERE b.id<=a.id
GROUP BY a.id;

运行效果

追问

首先要谢谢你,我想问下前面的“a.”,“b.”代表的是什么,谢谢

追答

a和b分别是为了实现数据表“收支记录”的自连接而取的表别名,否则系统弄不清楚那张表是那张表,因为同名嘛!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-08
select sum(余额) from 表名追问

余额在表里是没有的,是查询里的一字段,而且应该不是运行累加,显示的会是全部总计,我要的是逐行累加

追答

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

追问

都说过了,你这种语句结果每行的运行数都是350,不会每行数不同,请问还有其他方法吗?

追答

怎么可能,你每行的收入和支出不一样,怎么会都是350???

追问

看看这图吧,上面的是语句,下面的是运行结果,一种是数字有null,改零或加nz()后也是最后那样子

相似回答