我有兩張桌子:
工資單:
| 工資單 ID | 工資扣除 | 工資單日期 | 員工姓名 |
|---|---|---|---|
| 1 | 計算 | 2022 年 5 月 29 日 | 美國廣播公司 |
| 2 | 計算 | 2022 年 4 月 29 日 | 美國廣播公司 |
| 3 | 計算 | 2022 年 3 月 29 日 | 美國廣播公司 |
| 4 | 計算 | 2/28/2022 | 美國廣播公司 |
工資扣除:
| 扣款編號 | 扣除日期 | 扣除金額 | 員工姓名 |
|---|---|---|---|
| 1 | 2022 年 3 月 30 日 | 50 | 美國廣播公司 |
| 2 | 2022 年 5 月 10 日 | 100 | 美國廣播公司 |
| 3 | 2022 年 5 月 15 日 | 100 | 美國廣播公司 |
我有兩個表格“工資單”和“工資扣除”。扣除從總工資單金額中洗掉(此處未顯示,因為它沒有必要解決問題)。
我正在嘗試計算每個工資周期的總應計扣除額。(2022 年 4 月 29 日 -> 2022 年 5 月 29 日是一個工資周期)。在上面的示例中,兩個日期(即工資周期)之間的總扣除額應為 200。我希望該數字顯示在 Salary Payslips 表中 Payslip ID=1 的 Salary Deduction 欄位中。
以同樣的方式,2022 年 3 月 30 日的扣除額應顯示在工資單 id =2.... 的記錄中的工資單表中,依此類推。工資單 id = 3 中的扣除金額應為零,因為在 2/28-3/29 期間沒有扣除。
這應該在兩個表中的員工姓名相同的情況下完成,因此“ABC 在 2022 年 2 月 28 日和 2022 年 3 月 29 日之間的周期中從工資中扣除了 50”等。
所有這些都應該以一種形式遞回更新。因此,控制元件應該能夠查詢表中的資料并將其決議到表單中的相應欄位(并通過關聯,表)。
uj5u.com熱心網友回復:
考慮DSum在 MS Access(前端 GUI 但不是后端連接)中可用作運算式函式、VBA 函式和 SQL 函式的域聚合。同樣,您可以使用DLookUp(我在您之前的問題中建議的)呼叫SUM()運算式引數。
具體來說,將Salary Deduction其他表中的列通過對應的Employee Name和 where落在使用后不到一個月Deduction Date的日期范圍內求和。PaySlip DateDateAdd
運算式( 在表單的表單設計中設定為控制文本框的來源)[Salary Deduction][Salary PaySlip]
=DSum("[Deduction Amount]",
"[Salary Deductions]",
"[Employee Name] = '" & [Employee Name] & "' AND
[Deduction Date] >= #" & [PaySlip Date] & "#
AND < #" & DateAdd("m", 1, [PaySlip Date]) & "#")
VBA (以編程方式計算控制源)
Forms![Salary PaySlip]![Salary Deduction] = DSum( _
"[Deduction Amount]", _
"[Salary Deductions]", _
"[Employee Name] = '" & Forms![Salary PaySlip]![Employee Name] & "' AND " _
& "[Deduction Date] >= #" & Forms![Salary PaySlip]![PaySlip Date] & "#" _
& " AND < #" & DateAdd("m", 1, Forms![Salary PaySlip]![PaySlip Date]) & "#" _
)
SQL
UPDATE (DSum用于將資料保存到表中——不能使用子查詢)
UPDATE [Salary PaySlip] p
SET p.[Salary Deduction] = DSum(
"[Deduction Amount]",
"[Salary Deductions]",
"[Employee Name] = '" & p.[Employee Name] & "' AND
[Deduction Date] >= #" & p.[PaySlip Date] & "#
AND < #" & DateAdd("m", 1, p.[PaySlip Date]) & "#"
)
或者,您可以使用相關的聚合子查詢,這對于足夠大的資料可能會出現性能問題。希望有一天,MS Access 團隊將在 Access SQL 方言中添加對視窗函式(根據 SQL ANSI 2003)的支持!
SELECT (使用相關聚合子查詢)
SELECT p.[PaySlip ID],
(SELECT SUM([Deduction Amount])
FROM [Salary Deductions] d
WHERE d.[Employee Name] = p.[Employee Name]
AND d.[Deduction Date] >= p.[PaySlip Date]
AND < DateAdd('m', 1, p.[PaySlip Date])
) AS [Salary Deduction],
p.[PaySlip Date]
p.[Employee Name]
FROM [Salary Payslips] p
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488993.html
