私はMSAccessを使用してデータベースを構築していますが、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
あなたが欲しい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
);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加