在MS Access中使用Sum函数时如何避免查询返回重复行?
解决MS Access Sum查询返回重复行的问题
针对你遇到的Sum查询返回重复行的问题,提供几个可行的解决方法:
1. 检查并统一员工信息格式
出现重复行可能是因为StaffName存在隐性差异(比如前后空格、大小写不一致),导致分组时被识别为不同条目。可以先清理格式后再聚合:
SELECT StaffNo, UCase(Trim(StaffName)) AS CleanStaffName, Sum([Pay]) AS TotalPay FROM tblHours WHERE Restricted = 'Yes' GROUP BY StaffNo, UCase(Trim(StaffName));
你也可以先查询确认是否存在这类差异:
SELECT StaffNo, StaffName, COUNT(*) AS RowCount FROM tblHours WHERE Restricted = 'Yes' GROUP BY StaffNo, StaffName HAVING COUNT(*) > 1;
2. 先去重再聚合
如果tblHours中存在完全重复的记录(同一员工的同一薪资条目重复),可以先提取唯一记录再求和:
SELECT StaffNo, StaffName, Sum([Pay]) AS TotalPay FROM ( SELECT DISTINCT StaffNo, StaffName, Pay FROM tblHours WHERE Restricted = 'Yes' ) AS DistinctHours GROUP BY StaffNo, StaffName;
3. 关联规范化的员工表(若存在)
如果数据库中有单独的员工信息表(比如tblStaff,存储唯一的员工编号和姓名),建议从员工表关联工时表查询,避免工时表中员工信息的冗余导致的分组问题:
SELECT s.StaffNo, s.StaffName, Sum(h.Pay) AS TotalPay FROM tblStaff s INNER JOIN tblHours h ON s.StaffNo = h.StaffNo WHERE h.Restricted = 'Yes' GROUP BY s.StaffNo, s.StaffName;
内容的提问来源于stack exchange,提问作者Fil
相关产品推荐
相关产品推荐

