访问报告子组求和
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]))
。以上是关于访问报告子组求和的主要内容,如果未能解决你的问题,请参考以下文章