MS Access 对组的总和,但不是对细节的总和
Posted
技术标签:
【中文标题】MS Access 对组的总和,但不是对细节的总和【英文标题】:MS Access sum on groups, but not on details 【发布时间】:2009-03-19 10:52:28 【问题描述】:我正在尝试通过以下方式在 MS Access 报告中计算 SUM:
Group1header - 标签
Group2 标头 - 值 详细信息 - 示例 详细信息 - 示例 Group2 标头 - 值 详细信息 - 示例Group1footer [Group2header 值的总和]
不知何故,当出现更多详细信息行时,group1footer 中的总和计算不正确(为每个详细信息添加值)。
我无法计算查询中的总和,因为“值”已经是在查询中计算出来的(子查询会返回很多行):
(
(
(sl_ticketdetail.weight,0) * sl_ticketdetail.amount
- (
SELECT SUM(sl_invoicedetail.amount)
FROM sl_invoicedetail
WHERE ticketdetailid = sl_ticketdetail.ticketdetailid
)
/ 1000
)
* sl_ticketdetail.cost
)
/ 1000
知道可能出了什么问题吗?
【问题讨论】:
【参考方案1】:你是说你得到这样的结果:
Group 1a
Group 2a
Foo1 1
Foo2 1
foo3 2
Group 2a Sum 4
Group 2b
Foo1 3
Foo2 3
Group 2a Sum 6
Group 1a Sum 10
Group 1b
Group 2a
Foo1 4
Foo2 1
foo3 2
Group 2a Sum 7
Group 2b
Foo1 4
Foo2 3
Group 2a Sum 14
Group 1b Sum 21
这是我所期望的行为。我可以通过将=Sum([value])
放在每个组页脚(甚至报告页脚)的未绑定字段中来做到这一点。
我知道“为我工作”不是很有帮助。
您是否使用与数据源相同的名称标记了详细信息的值字段(或汇总字段)?如果您的字段与其绑定的数据源具有相同的名称,有时 MS Access 会出现奇怪的行为(我倾向于稍微重命名它们,以便确定我在代码中指的是什么)。
【讨论】:
【参考方案2】:由于您已经在查询中预先计算了 Group2 总和,因此它们将针对每一行结果重复,因此不能用于(如您发现的那样)计算 Group 1 总和。
你有两个解决方案
1) 也预先计算查询中的 Group1 总数,并在您执行 Group2 总数时简单地报告它们
2) 使用 Group2 页脚格式/打印事件中的代码来捕获值并手动增加正在运行的 Group1 总数
我会说 1) 是最简单的 - 2) 有点麻烦,如果用户来回翻页,有时会导致总数不准确
【讨论】:
【参考方案3】:您必须拥有主报表的记录源才能包含第 2 组的总计。然后您将需要一个具有不同记录源的子报表,该记录源处于详细级别。
我认为您最好的选择是在查询中省略总计,而让报告对详细信息进行总计。稍后,用户可能想要同一日期的总计但不同的分组(是的,您可以创建另一个记录源)。这也应该解决用户是否在分组以外的字段上对报告应用过滤器(您可能已经或可能没有给他们这个选项。)。
【讨论】:
以上是关于MS Access 对组的总和,但不是对细节的总和的主要内容,如果未能解决你的问题,请参考以下文章