如何创建MS Access查询按ID汇总志愿者各项目工时?
解决Access志愿者工时合并报表问题
第一步:创建正确的交叉表查询(核心)
你之前的交叉表查询没达到效果,是因为字段设置不对,按下面步骤来:
- 打开Access,新建查询设计,添加「联系人表」和「志愿统计表」,手动关联两个表的
ID字段(即使没设参照完整性也能关联)。 - 在顶部「设计」选项卡,点击「交叉表」,把查询类型切换为交叉表。
- 添加以下字段并设置参数:
- 联系人表的
ID:- 交叉表:行标题
- 总计:Group By
- 联系人表的
姓名:- 交叉表:行标题
- 总计:Group By
- 排序:升序(解决按姓名排序的问题)
- 志愿统计表的
项目名称:- 交叉表:列标题
- 总计:Group By
- 志愿统计表的
工时:- 交叉表:值
- 总计:Sum
- 字段名可改为
总工时,或直接用表达式Sum(Nz([工时], 0))(把空值转成0,避免显示Null)
- 联系人表的
- 点击运行按钮,就能得到每个志愿者一行、各项目工时单独列出来的结果。
第二步:基于交叉表查询制作报表
- 新建报表,选择「报表向导」,数据源选刚才做好的交叉表查询,把所有字段都选进报表。
- 向导里不需要设置分组(因为查询已经按ID/姓名分组好了),直接设置排序(选姓名升序),再选择报表样式。
- 生成的报表里,每个志愿者的姓名只会显示一次,所有项目的工时都在同一行,完全符合需求。
额外注意事项
- 如果项目名称有格式问题(比如空格、大小写不一致),会导致交叉表生成多余列,建议先整理志愿统计表的
项目名称字段,或者在交叉表查询里用Trim([项目名称])作为列标题的字段,统一格式。 - 如果后续新增项目,交叉表查询会自动把新项目作为新列,报表刷新后也会同步显示,不用手动调整。
内容的提问来源于stack exchange,提问作者Josh Bellingham
相关产品推荐
相关产品推荐

