我无法执行查询来比较一个表中列的值不等于另一个表中另一列的总和的位置。以下是我一直试图执行的查询:
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值的数据。任何帮助将不胜感激。
答案 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
。