繁体   English   中英

考虑 null 值,根据另一表中的值查询一个表中的总和值

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

您可以将其作为单个查询执行,如下所示:

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

鉴于这两个表:

在此处输入图像描述

在此处输入图像描述

查询将产生以下结果:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM