Office中国论坛/Access中国论坛

标题: 请教版主关于结存(余额)的设计问题! [打印本页]

作者: smilingkiss    时间: 2012-1-1 21:38
标题: 请教版主关于结存(余额)的设计问题!
本帖最后由 smilingkiss 于 2012-1-1 22:44 编辑

[attach]47880[/attach]表记录字段如下:[单价],[数量],[总额],(其中[总额]=[单价]*[数量]
窗体上加一个[结存]文本框控件,如果是第一条记录,则[结存]=[总额],否则,[结存]=上一条记录的[结存]+本条记录的[总额],如此类推,不知道能否实现?有劳版主指教了!
作者: Henry D. Sy    时间: 2012-1-1 22:02
1.发帖请用简明能说明问题的标题
2、表中没有必要保存金额,其完全可以利用查询得到
3. 你的问题应该是求余额
4.最好能传例子
作者: smilingkiss    时间: 2012-1-1 22:44
已经更新,请版主指教方法
作者: Henry D. Sy    时间: 2012-1-1 23:55
smilingkiss 发表于 2012-1-1 22:44
已经更新,请版主指教方法

请把表中的总额去掉
  1. SELECT a.ID, a.单价, a.数量, (select sum(单价*数量) from 表1 as b where b.id<=a.id) AS 总额
  2. FROM 表1 AS a;
复制代码
[attach]47881[/attach]
作者: smilingkiss    时间: 2012-1-2 10:46
谢谢版主!那么晚了还孜孜不倦啊
另,能否对代码给我简单分析说明一下,我是菜鸟,不知道其中的a,b是怎么定义的,谢谢!
作者: Henry D. Sy    时间: 2012-1-2 10:55
a,b 是表的别名,也就是说: a表,b表其实是表1(相当于副本)
作者: ycxchen    时间: 2012-1-2 17:43
在4楼的代码中,我也想请教:既然表1已经有单价、数量字段了,为何还要表的别名的?另, 为何要设b.id<=a.id这个条件?
作者: Henry D. Sy    时间: 2012-1-2 22:39
ycxchen 发表于 2012-1-2 17:43
在4楼的代码中,我也想请教:既然表1已经有单价、数量字段了,为何还要表的别名的?另, 为何要设b.id

1.表1是可以不用别名a,也就是可以把a改写为表1,这里的别名a是为了书写方便!
2.至于b,就一定要用了,这是为了比较。
3.为何要设b.id<=a.id这个条件?
       因为楼主要得到的结果是余额,也就是累计(相当于报表的运行总和)
   这里为了方便我们还是用a来代表表1
假设:查询现在处于第一条记录,也就是a.id=1时,b.id<=a.id,也就是b.id<=1,显而易见只有一条记录,也就是第一条记录。那么余额就是第一条记录的单价*数量
当处于第二条记录时,a.id=2,b.id<=a.id,也就是b.id<=2,那么就有两条记录,就是id=1,和 id=2的记录。说到这里应该不用再说了吧!

作者: ycxchen    时间: 2012-1-3 08:47
本帖最后由 ycxchen 于 2012-1-3 08:48 编辑

十分感谢版主手把手式的教导!抱歉,我还是不明为何要设b来比较的?不用行吗?
作者: wgh3g    时间: 2012-1-3 08:56
下载学习
作者: Henry D. Sy    时间: 2012-1-3 09:00
ycxchen 发表于 2012-1-3 08:47
十分感谢版主手把手式的教导!抱歉,我还是不明为何要设b来比较的?不用行吗?

不用怎么比呀,自己跟自己比?
也就是a.id<=a.id?
作者: andymark    时间: 2012-1-3 09:20
因为引用了2次相同的表,第二次引用表1需要另名才能认别
也可以这样书写
SELECT ID, 单价, 数量, (select sum(单价*数量) from 表1 as b where b.id<=表1.id) AS 总额
FROM 表1
作者: ycxchen    时间: 2012-1-3 09:38
经andymark的提醒,明明白白了,多谢两位!
作者: george    时间: 2012-3-7 15:24
好的,原来求余额这么简单,都不需要什么临时表和编程,直接查询就出来了。学习,佩服!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3