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 对组的总和,但不是对细节的总和的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 按日期累积总和?

如何将总和存储到 MS Access 表中

组的 Microsoft Access 总计

MS Access SQL 运行总数

打印 2 个数组的行和列的总和

查询或 dsum 中的 MS Access 性能 dlookup?