Access Query中基于项目和日期的运行总计

Posted

技术标签:

【中文标题】Access Query中基于项目和日期的运行总计【英文标题】:Running total in Access Query based on item and date 【发布时间】:2018-10-16 14:36:48 【问题描述】:

我在尝试创建一个计算字段的 Access Query 时遇到了困难,该字段显示了商店中已退回或退回的零件的运行总数;在一个表中按日期顺序排序。

“DMPartsT”表如下所示:

ID     RecordDate     PartID     PartTransactions
1      12/04/2018     3          6
22     22/02/2017     9          14
3      18/05/2018     5          7
2      12/11/2017     3         -3
11     25/09/2018     7          12
4      21/06/2018     5         -2
5      14/07/2018     8          43
7      15/01/2018     3          18
6      24/03/2018     10         30
8      25/05/2018     3          -2

我的目标是让查询返回一个表,其中包含一个添加的计算字段,该字段将显示特定部分的运行总计,按日期排序。例如,PartID = 3,生成的结果应该如下:

ID     RecordDate     PartID     PartTransactions     PartTotal
2      12/11/2017     3         -3                    -3
7      15/01/2018     3          18                    15
1      12/04/2018     3          6                     21
8      25/05/2018     3         -2                     19

查询应该查看表中的所有可用数据。

我在计算字段中使用了最明显的选择 DSUM 表达式,但成功率很低。我使用的代码版本如下:

PartTotal: IIf([PartID]=3,DSum("[PartTransactions]","DmPartsT","[RecordDate]<=#" & [RecordDate] & "#"))

并且,“RecordDate”按 Acsending 排序,“PartID”在查询窗口中过滤为 3,我以正确的日期顺序获得类型 3 的所有部分的列表,但是 Part_Total 数字都不正确!

如果有人能帮助找出正确的方法,我将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

如果你要使用DSum,你需要格式化你的字符串。但是您应该很少在查询中使用域聚合。在几乎所有情况下,您都应该只使用子查询。

另外,求和时还需要指定部分 ID,因此请将其包含在子查询(或域聚合)的 WHERE 子句中。

PartTotal: (SELECT SUM([PartTransactions]) FROM DmPartsT t WHERE t.[RecordDate]<=  DMPartsT.[RecordDate] AND t.PartID = DmPartsT.PartID)

这避免了来回转换为字符串时的错误,并允许优化器分析和优化您的查询。

【讨论】:

你的表情很到位。谢谢你。这是按照我的意愿完成任务,但只是为了确定和理解操作,你是说这不是最好的方法,使用子查询是正确的方法吗?如果是这样,请您解释一下主查询和子查询对数据执行的单独功能。 是的。子查询由数据库引擎处理。域聚合由 Access 应用程序运行并运行查询,这意味着,对于每一行,您都有很多开销(从 DB 引擎到应用程序再到 DB 引擎),并且如果您从外部应用程序执行,它只是不起作用。正确的域聚合应该是 DSum("[PartTransactions]","DmPartsT","[RecordDate]&lt;=#" &amp; Format([RecordDate], "yyyy-mm-dd &amp; "# AND PartID = " &amp; PartID),但不要使用它。

以上是关于Access Query中基于项目和日期的运行总计的主要内容,如果未能解决你的问题,请参考以下文章

Rails Active Record Query工作日总计离开

计算 SQL 中日期字段的计数和运行总计

如何在MS ACCESS中从另一个查询中传递PARAMETERS到查询中(不用VBA)?

MS Access Query 以检索订单日期列中最新日期的记录

组的 Microsoft Access 总计

如何将一列的运行总计添加到 Access 查询?