如何使用UPDATE与SUM()聚合函数更新MS Access关联表
在MS Access中更新table2的Total Salary为table1对应员工的工资总和
嘿,这个需求我太熟悉了!在MS Access里实现这个更新,得用它特有的更新查询语法,毕竟Access的JOIN写法和标准SQL有些区别。下面给你分步说明:
核心思路
我们需要先对table1按Employee Name和Emp Number分组,计算每个员工的工资总和,再通过关联字段把这个总和同步到table2的Total Salary字段里。
直接可用的SQL代码
把这段代码复制到Access的SQL视图里执行就行:
UPDATE table2 INNER JOIN ( -- 子查询:计算每个员工的工资总和 SELECT [Employee Name], [Emp Number], SUM([Emp Salary]) AS SumSalary FROM table1 GROUP BY [Employee Name], [Emp Number] ) AS SalarySummary -- 用两个关联字段匹配表 ON table2.[Employee Name] = SalarySummary.[Employee Name] AND table2.[Emp Number] = SalarySummary.[Emp Number] -- 更新Total Salary字段 SET table2.[Total Salary] = SalarySummary.SumSalary;
关键细节提醒
- 因为你的字段名里包含空格,所以必须用方括号
[]把字段名包起来,否则Access会识别错误。 - 如果
table2里存在一些员工在table1中没有对应记录的情况,用上面的INNER JOIN会跳过这些员工(他们的Total Salary保持原样)。要是想把这些员工的Total Salary设为0,可以改成LEFT JOIN,并使用Access的NZ函数处理空值:UPDATE table2 LEFT JOIN ( SELECT [Employee Name], [Emp Number], SUM([Emp Salary]) AS SumSalary FROM table1 GROUP BY [Employee Name], [Emp Number] ) AS SalarySummary ON table2.[Employee Name] = SalarySummary.[Employee Name] AND table2.[Emp Number] = SalarySummary.[Emp Number] SET table2.[Total Salary] = NZ(SalarySummary.SumSalary, 0); - 执行更新前,建议先单独运行子查询(就是括号里的部分),确认求和结果是正确的,避免误操作。如果数据重要,最好先备份两个表。
内容的提问来源于stack exchange,提问作者Mohan
相关产品推荐
相关产品推荐

