Access中实现对日期筛选后的表运行按周几分组的Group By查询
解决方案
核心实现逻辑
SQL执行顺序中WHERE子句优先级高于GROUP BY聚合操作,你可以直接在关联表语句后加日期过滤条件,无需将PickDate加入输出字段或分组规则,不会影响现有的周几分组逻辑,完美实现「先过滤再聚合」的需求。
可用SQL示例
替换你原有的SQL片段即可,注意替换实际的工单时长计算字段:
SELECT tblCustomers.Customer AS CustName, WeekdayName(Weekday([PickDate]),False,1) AS Day, Avg([工单完成时长字段]) AS AvTime FROM tblCustomers INNER JOIN tblTickets ON tblCustomers.CustomerID = tblTickets.CustomerID -- 新增日期过滤条件,在分组前生效 WHERE tblTickets.PickDate Between #11/1/2021# And #11/14/2021# GROUP BY tblCustomers.Customer, WeekdayName(Weekday([PickDate]),False,1), tblCustomers.Round, Weekday([PickDate]) ORDER BY tblCustomers.Round, Weekday([PickDate]);
原异常原因
你之前通过查询属性的filter参数添加过滤时,Access可视化界面会自动将PickDate加入输出字段列表,强制要求对该字段分组,才会出现打乱原有周几分组规则的问题,直接手动修改SQL添加WHERE条件即可避免该问题。
可选动态参数优化
如果需要灵活调整日期范围,无需每次修改SQL,可以将过滤条件改为参数化形式,运行查询时会自动弹窗要求输入起止日期:
WHERE tblTickets.PickDate Between [请输入开始日期(格式:月/日/年)] And [请输入结束日期(格式:月/日/年)]
内容的提问来源于stack exchange,提问作者Fohristiwhirl
相关产品推荐
相关产品推荐

