MS-Access按员工更新统计数据异常问题求助
Access UPDATE查询错误:所有员工统计字段被更新为全表总数
我编写了一个UPDATE查询,目的是利用Beldata_filter和Urenlog_filter两个表中的员工活动数据,在Bellers_filter表中生成每位员工的绩效分析。但当前查询无法根据员工自身数据更新统计信息,反而将所有员工的总活动数批量更新到每位员工的统计字段中。
原查询代码
UPDATE (Bellers_Filter INNER JOIN Urenlog_Filter ON Bellers_Filter.Naam=[Urenlog_Filter].Naam) INNER JOIN Beldata_Filter ON Bellers_Filter.[Naam]=[Beldata_Filter].Beller SET Bellers_Filter.[Num b] = Dcount("[Beller]","[Beldata_Filter]"), Bellers_Filter.[Num o] = Dcount("[Opgenomen]","[Beldata_Filter]","Opgenomen = 1"), Bellers_Filter.[Num nno] = Dcount("[Actie]","[Beldata_Filter]","Actie = 3"), WHERE ([Beldata_Filter].Beller=[Urenlog_Filter].Naam);
源表数据(Beldata_filter)
| Beller | ID | Moment | Opgenomen | Actie |
|---|---|---|---|---|
| Robert | 55 | 8-11-2022 | 1 | 1 |
| Susan | 56 | 8-11-2022 | 1 | 1 |
| Robert | 55 | 9-11-2022 | 1 | 2 |
| Robert | 55 | 9-11-2022 | 0 | 3 |
| Susan | 56 | 9-11-2022 | 1 | 1 |
每条记录代表一位员工的一次操作,Urenlog_filter表格式与此相同。
期望更新结果(Bellers_filter)
| Id | Naam | Num b | Num o | Num nno |
|---|---|---|---|---|
| 1 | Robert | 3 | 2 | 1 |
| 2 | Susan | 2 | 2 | 0 |
当前错误结果
| Id | Naam | Num b | Num o | Num nno |
|---|---|---|---|---|
| 1 | Robert | 5 | 4 | 1 |
| 2 | Susan | 5 | 4 | 1 |
解决方案
修改查询,给每个DCount函数添加员工姓名筛选条件,同时优化表关联逻辑避免重复匹配:
UPDATE Bellers_Filter SET Bellers_Filter.[Num b] = DCount("[Beller]", "[Beldata_Filter]", "Beller = '" & Bellers_Filter.Naam & "'"), Bellers_Filter.[Num o] = DCount("[Opgenomen]", "[Beldata_Filter]", "Beller = '" & Bellers_Filter.Naam & "' AND Opgenomen = 1"), Bellers_Filter.[Num nno] = DCount("[Actie]", "[Beldata_Filter]", "Beller = '" & Bellers_Filter.Naam & "' AND Actie = 3") WHERE EXISTS ( SELECT 1 FROM Urenlog_Filter WHERE Urenlog_Filter.Naam = Bellers_Filter.Naam );
关键修改点
- 添加员工筛选条件:每个
DCount的第三个参数增加Beller = '" & Bellers_Filter.Naam & "',确保只统计当前员工的记录,而非全表数据。 - 优化表关联:用
EXISTS替代多表INNER JOIN,避免因关联导致的重复更新问题,同时保证只更新在Urenlog_filter中有记录的员工。
内容的提问来源于stack exchange,提问作者wobbe vdpas
相关产品推荐
相关产品推荐

