如何在Access报表中按表单日期参数获取唯一部门与课程列表?
Access报表:指定日期范围的唯一部门&课程查询方案
方法一:用DISTINCT筛选唯一组合
直接修改原查询,只在SELECT里保留需要去重的Department和Course,DoneDate只留在WHERE子句里做日期范围过滤,这样DISTINCT就会基于部门+课程的组合去重,不会被日期干扰。SQL语句如下:
SELECT DISTINCT Department, Course FROM TrainingsDone INNER JOIN Trainings ON TrainingsDone.TrgMastID = Trainings.TrgMastID WHERE TrainingsDone.DoneDate Between [Forms]![frmReports_Menu]![txtStartDate] And [Forms]![frmReports_Menu]![txtEndDate];
方法二:用GROUP BY分组实现去重
如果后续需要扩展统计(比如该部门课程在范围内的培训次数),用GROUP BY更灵活,同样只保留部门和课程作为分组字段,日期条件不变:
SELECT Department, Course FROM TrainingsDone INNER JOIN Trainings ON TrainingsDone.TrgMastID = Trainings.TrgMastID WHERE TrainingsDone.DoneDate Between [Forms]![frmReports_Menu]![txtStartDate] And [Forms]![frmReports_Menu]![txtEndDate] GROUP BY Department, Course;
绑定报表的操作
把上面任意一个查询设为报表的记录源,然后在报表里添加对应Department和Course的控件即可,这样报表里只会显示日期范围内唯一的部门-课程组合,不会出现重复项。
原查询失效原因
你之前的查询因为把DoneDate加入了SELECT列表,DISTINCT会把“部门+课程+日期”作为整体去重,只要日期不同,哪怕部门课程一样也会生成多条记录。把DoneDate移出SELECT,只用来过滤数据,就能保证部门和课程的唯一性。
内容的提问来源于stack exchange,提问作者st_user_321122
相关产品推荐
相关产品推荐

