簡體   English   中英

SQL/MS Access:在 SQL 表中添加一個自動更新的字段,其中包含另一個表中的值的總和

[英]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 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;

如果您在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM