我有一个包含表students
,tests
和test_results
的测试结果数据库。 test_results
中的每条记录都指的是来自students
的密钥,来自tests
的密钥,一个得分以及缺席的是/否字段。我还有一个报告,每个测试都有副标题(按分组)。我想在该测试的标题上显示每个测试的平均分数,但我只想计算那些学生没有缺席的记录的平均分数。
我没有成功尝试两种方法:
名为averageScoreWhereNotAbsent
的查询SELECT Avg(score) AS Expr1 FROM test_results WHERE (((test_results.absent])=False));
;和报告的测试分组子标题上的未绑定字段,源代码为=DLookUp("[score]","[averageScoreWhereNotAbsent]![Expr1]","[test] = " & [ID])
。不幸的是,这会返回'#error'。我试过调整它,但它会问我参数或奇怪 - 显示最后一个学生的分数而不是平均分数。我的语法出了什么问题?!
循环通过test_results
的某些VBA查找与当前测试ID匹配但未标记为缺席的字段。它对它们求和并取平均值并更新测试子标题上的未绑定字段。报告加载时会调用代码。它起作用......但是每个测试显示相同的平均值。问题很明显:(在报告视图中,每次重复子标题时重复该字段,即每次测试,但在设计视图中,您只能看到一个子标题和一个字段 - 我不知道如何引用每个子标题和VBA各自的领域 - 我想它们都是相同的领域!
我认为答案是微不足道的,但我是Access的新手 - 我错过了什么?谢谢!
答案 0 :(得分:1)
如果要通过测试进行平均,则在聚合查询中按变量添加测试(当然,将ID调整为指示测试的实际字段名称):
SELECT test_ID, Avg(score) AS AverageScore
FROM test_results
WHERE (((test_results.[absent])=False))
GROUP BY test_ID;
然后DLookUp报告将如下所示(当然,将报告名称和test_ID控制调整为实际名称,并确保控件存在于放置的部分中):
=DLookUp("[AverageScore]","[averageScoreWhereNotAbsent]",
"[test_ID] = " & Reports!reportname!test_IDfield)