我在 MS Access 中有兩個表。一個用于合同,帶有合同 ID 和總價值。每個合同中支付的另一筆款項。
因此,例如,當客戶獲得總價值為 100.00 美元的新合同時,他可以按他想要的任何金額支付,直到總價值,例如兩次支付 50.00 或 30.00 和另一次 70.00 甚至 100 1.00 的付款。并且這些付款與合同 ID 和付款金額一起進入付款表。
我需要查詢一下他們還需要為每份合同支付多少費用。每份合約的凈額是多少。
我設法進行了一個查詢,給出了我需要的結果,但如果合同是新合同并且該新合同的付款表上沒有付款,我的查詢中顯示的凈金額為零(空白欄位),我需要它改為顯示合同的總價值。
例如 100.00 的合約,兩次支付 10.00 和 15.00 應顯示凈值為 75.00
沒有付款的 100.00 合約應顯示凈值為 100.00
這是我到目前為止所擁有的:
'查詢1
SELECT Contracts.[Contract ID],
Sum(Payments.[Payment Value]
FROM Contracts
LEFT JOIN Payments
ON Contracts.[Contract ID] = Payments.[Contract ID]
GROUP BY Contracts.[Contract ID]
查詢 2:
SELECT Contracts.[Contract ID],
Contracts.[Contract Value],
Query1.[SumOfValue Payment Value],
[Contract Value] - [SumOfValue Payment Value]
INTO NetValues
FROM Contracts
INNER JOIN Query1
ON Contracts.[Contract ID] = Query1.[Contract ID]
基本上,查詢 1 將每個合同的付款相加,查詢 2 計算凈值(總價值 - 支付金額)
如果有更好的方法來實作這一切,請告訴我。
uj5u.com熱心網友回復:
您可以將其作為單個查詢執行,如下所示:
SELECT c.[Contract ID],
c.[contract value],
p.Paid,
c.[contract value]-nz(p.paid) AS Remaining
FROM Contracts AS c
LEFT JOIN
(SELECT [Contract ID], sum([Payment Value]) as paid
FROM Payments
group by [Contract ID]) AS p
ON c.[Contract ID] = P.[Contract ID];
鑒于這兩個表:


查詢將產生以下結果:

uj5u.com熱心網友回復:
“ ...如果合同是新合同并且該新合同的付款表中沒有付款,則我的查詢中顯示的凈金額為零(空白欄位)”
實際上,當您沒有記錄給定合同的付款時,Query1會為您提供 Null,而不是零,作為付款的總和。任何減去 Null 的數字都會給您 Null,而不是第一個數字。
如果要將 Null 視為零,請使用 Nz 函式
這是這些問題的即時視窗示例:
Contract_Value = 100.00
SumOfValue_Payment_Value = Null
? Contract_Value - SumOfValue_Payment_Value
Null
' use Nz() to substitute zero for Null
? Contract_Value - Nz(SumOfValue_Payment_Value, 0)
100
您可以通過包含以下內容在Query2中執行相同操作:
[Contract Value] - Nz([SumOfValue Payment Value], 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505145.html
上一篇:將附件匯出到檔案夾
