比较一个表中一个字段的值与另一个表中一列的总和

时间:2018-05-28 15:48:26

标签: sql db2

我无法执行查询来比较一个表中列的值不等于另一个表中另一列的总和的位置。以下是我一直试图执行的查询:

select id.invoice_no,sum(id.bank_charges),
from db2apps.invoice_d id
inner join db2apps.invoice_h ih on (id.invoice_no = ih.invoice_no)
group by id.invoice_no
having coalesce(sum(id.bank_charges), 0) != ih.tax_value
with ur;

我尝试加入表格,小组通过格式等,并没有运气。我真的想在结果集中选择id.invoice_no,ih.tax_value和sum(id.bank_charges),并且还要获取sum(id.bank_charges)不等于ih.tax_value值的数据。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

也许这解决了你的问题:

select ih.invoice_no, ih.tax_value, sum(id.bank_charges)
from db2apps.invoice_h ih left join
     db2apps.invoice_d id
     on id.invoice_no = ih.invoice_no
group by ih.invoice_no, ih.tax_value
having coalesce(sum(id.bank_charges), 0) <> ih.tax_value;

答案 1 :(得分:0)

最合乎逻辑的方法可能是先将发票详细信息弄清楚。

SELECT  IH.INVOICE_NO
,       IH.TAX_VALUE
FROM
    DB2APPS.INVOICE_H IH 
JOIN
(   SELECT  INVOICE_NO
    ,       COALESCE(SUM(BANK_CHARGES),0) AS BANK_CHARGES
    FROM
        DB2APPS.INVOICE_D
    GROUP BY
             INVOICE_NO
) ID
ON
    ID.INVOICE_NO = IH.INVOICE_NO
WHERE
    ID.BANK_CHARGE <> IH.TAX_VALUE

通常,您从不需要在SQL中使用HAVING,如果您确实避免使用它,通常您的代码会更清晰,更容易理解(即使它有时会更长一些)。

P.S。如果COALESCE为非空,则可以删除BANK_CHARGES