![](/img/trans.png)
[英]sql adding a field to a table and updating it with count values from another table
[英]SQL/MS Access: Adding a automatically updating field in SQL table with sum of values from another table
我正在用 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 上,我尝试向人员中的总字段添加查找查询以自动更新值,但如果只给我一个组合框选项以供选择。
对此问题的任何建议和解决方案将不胜感激,谢谢。
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 连接
你想要一个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;
如果您在staff
有一个total
列,您可以使用最后一种方法更新它:
update staff
set total = (select nz(sum(p.salary))
from payroll as p
where p.id = staff.id
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.