微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL / MS Access:在SQL表中添加一个自动更新的字段,其中包含来自另一个表的值的总和

如何解决SQL / MS Access:在SQL表中添加一个自动更新的字段,其中包含来自另一个表的值的总和

我正在使用MS Access构建数据库,并且对Access和sql语言还很陌生。
我想在表中添加一个字段,该字段将根据另一个表中列出的值的总和自动更新其值。



示例:

一个 staff 和一个工资表表,我想在 staff 中添加 total 字段strong>表,该表等于工资表中为每个员工列出的薪金总额。
通过逐步的方法,我设法建立了一个查询,该查询可以计算每个员工的工资。


工作人员

| 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 JOINNZ()

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
                );

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。