问题描述
我正在使用MS Access构建数据库,并且对Access和sql语言还很陌生。
我想在表中添加一个字段,该字段将根据另一个表中列出的值的总和自动更新其值。
示例:
有一个
通过逐步的方法,我设法建立了一个查询,该查询可以计算每个员工的工资。
工作人员
| id | name |
|----|----------|
| A1 | staff A1 |
| A2 | staff A2 |
| B1 | staff B1 |
工资单
| id | month | salary |
|----|-------|--------|
| A1 | JAN | 10000 |
| A2 | JAN | 15000 |
| A1 | FEB | 10000 |
总和
SELECT staff.id,SUM([payroll]![salary]) AS total
FROM payroll
INNER JOIN staff ON staff.id = payroll.id
GROUP BY staff.id;
| id | total |
|----|-------|
| A1 | 20000 |
| A2 | 15000 |
预期结果: 工作人员
| id | name | total |
|----|----------| ----- |
| A1 | staff A1 | 20000 |
| A2 | staff A2 | 15000 |
| B1 | staff B1 | 0 |
问题:
在MS Access上,我尝试向 staff 的 total 字段中添加查找查询以自动更新值,但是如果仅给我一个组合框选项,选择。
谢谢您对此问题的任何建议和解决方案。
SELECT total
FROM summation
WHERE staff.id = summation.id
解决方法
使用STAFF表中的主表可能会起作用,例如;
SELECT staff.id,SUM([payroll]![salary]) AS total
FROM staff
INNER JOIN payroll ON staff.id = payroll.id
GROUP BY staff.id;
,
INNER JOIN
表示,您正在对两个具有共同值的表格进行求和,这意味着如果B1
表中不存在payroll
,则它也不会出现在关系表中。
FULL OUTER JOIN
将帮助您隔离两个表中的所有数据。
也许这张图表会解释我的意思;
也许您需要使用FULL OUTER JOIN
。所以,它必须像那样;
SELECT staff.id,SUM([payroll]![salary]) AS total
FROM payroll
FULL OUTER JOIN staff ON staff.id = payroll.id
GROUP BY staff.id;
输出
| id | name | total |
|----|----------| ----- |
| A1 | staff A1 | 20000 |
| A2 | staff A2 | 15000 |
| B1 | staff B1 | 0 |
参考: SQL Joins
,您想要一个LEFT JOIN
和NZ()
:
SELECT s.id,NZ(SUM(p.salary)) AS total
FROM staff as s LEFT JOIN
payroll as p
ON s.id = p.id
GROUP BY s.id;
您也可以使用相关子查询来编写此代码。这样可以更轻松地保留staff
中的更多列:
select s.*,(select nz(sum(p.salary))
from payroll as p
where p.id = s.id
) as total
from staff as s;
如果您在total
中有一个staff
列,则可以使用最后一种方法进行更新:
update staff
set total = (select nz(sum(p.salary))
from payroll as p
where p.id = staff.id
);