[英]Query to Sum values from one table based on values from another table, considering null values
我在 MS Access 中有两个表。 一个用于合同,带有合同 ID 和总价值。 每个合同中支付的另一笔款项。
因此,例如,当客户获得总价值为 100.00 美元的新合同时,他可以按他想要的任何金额支付,直到总价值,例如两次支付 50.00 或 30.00 和另一次 70.00 甚至 100 1.00 的付款。 并且这些付款 go 带有合同 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 计算净值(总价值 - 支付金额)
如果有更好的方法来实现这一切,请告诉我。
“...如果合同是新合同并且此新合同的付款表上没有付款,则我的查询中显示的净金额为零(空白字段)”
实际上,当您没有记录给定合同的付款时, Query1会为您提供 Null,而不是零,作为付款的总和。 任何减去 Null 的数字都会给你 Null,而不是第一个数字。
如果您希望将 Null 视为零,请使用Nz Function
这是这些问题的即时 window 示例:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.