访问报告子组求和

Posted

技术标签:

【中文标题】访问报告子组求和【英文标题】:Access Report Subgroup summing 【发布时间】:2015-09-01 12:58:37 【问题描述】:

在 MS Access 2010 中,假设查询包含以下结果:

Date     Activity     Hours
1.9.     Reading      1
1.9.     Writing      2
2.9.     Reading      1
3.9.     Talking      1
4.9.     Reading      3

1.10.    Talking      2
1.10.    Writing      1
2.10.    Reading      2
3.10.    Talking      2
4.10.    Reading      1

报告应显示按活动分组的每月花费的总小时数,例如

Month           Activity            Hours
September       Reading             5
                Writing             2
                Talking             1

October         Reading             3
                Writing             1
                Talking             4

使用我管理的向导获取看起来像这样的报告

Month           Activity            Hours
September       Reading             1
                Reading             1
                Reading             3
                Writing             2
                Talking             1

October         Reading             2
                Reading             1
                Writing             1
                Talking             2
                Talking             2

这几乎是我想要的,但是......?

我尝试了 =sum(Hours),但所有 Hours 字段只包含所有小时的总和,我仍然会为同一活动获得几行。

实际上报告更复杂。在报告之前的表单中,用户可以输入日期范围(例如 9 月 1 日 - 10 月 30 日)。报告应该在整个时间范围内汇总,而不是分成几个月,即:

Date range      Activity            Hours
9/1 - 10/30     Reading             8
                Writing             3
                Talking             5

【问题讨论】:

【参考方案1】:

使用这样的 SQL 创建查询:

SELECT MonthName(Month([Date])), Activity, SUM(Hours)
FROM yourTable
WHERE [Date] >= xxx AND [Date] <= yyy
GROUP BY MonthName(Month([Date])), Activity

关键元素是 GROUP BY 子句,它是每月小时数 + 活动的总和。

然后根据该查询生成您的报告。

顺便说一句,将列称为“日期”不是一个好主意,它是 Access 中的保留字。

【讨论】:

是的,此解决方案在简单示例中有效。在我真正的数据库中,事情更复杂。在报告之前,我显示了一个掩码,用户可以在其中选择一个日期范围(例如 2.2.2015 - 5.5.2015)。我将该日期范围作为过滤器传递给报告,效果很好。现在我必须以某种方式在 GROUP BY 子句中包含该日期范围......?或者我可以以某种方式告诉它 GROUP BY Date,简单地忽略内容并同等对待所有日期? 是的,在真实数据库中,字段名称是“Eingang”,而不是“Date”:) 那很好。 :) 您可以在 GROUP BY 查询中使用 WHERE 子句,就像在普通查询中一样。见编辑。 xxx 和 yyy 可能应该引用过滤器表单中的字段,因此它可以用作报告的记录源。 是的,但仍会按月份名称分组。如果范围跨越两个或多个月,我仍然希望报告中只有一个小时字段吗? 嗯?我认为重点是按月和活动分组? “报告应显示每个月按活动分组的总小时数”。 --- 如果您不想这样,只需从 GROUP BY 子句中删除 MonthName(Month([Date]))

以上是关于访问报告子组求和的主要内容,如果未能解决你的问题,请参考以下文章

微软访问报表汇总功能

基于 2 列的访问报告中相同数据的总和

在报告页脚中与组求和

求和程序实验报告

在 Access CrossTab 查询报告中跨列求和行

cogs 516求和解题报告