在无数次尝试把自己逼疯之后,我求助于你,希望有人愿意帮助我....
我有 4 个表:SO (ServiceOrder)、PR (PreRecording)、IH (InvoiceHeader) 和 IL (InvoiceLine),列和行如下所示:
SO(服务订单):
公关(预录制):
IH(发票抬头):
IL(发票行):
关系:
-
PR.No_
=SO.No_
-
IH.SO
=SO.No_
-
IL.DocNo_
=IH.No_
期望的结果:
用我通常的简单内部/外部/连接我没有成功,很明显有些 SELECT
的应该是嵌套的。用一个简单的查询来组合SO
和 PR
, 我没有问题。用一个简单的查询来组合SO
和 IH
, 我没有问题。但是,当我尝试设置一个查询以在一个输出中获取所有这些内容时,由于在多个表中使用/找到的行,它变得困惑并且值开始成倍增加。
提前致谢....
最佳答案
您可以简单地嵌套您的查询,以便执行外部 SELECT
来自平坦的内部SELECT
.如果您的 RDBMS 版本不支持 WITH
,这也适用CTE。
保留 NULL
的行值,我使用了LEFT JOINS
还有 COALESCE
函数获取0
作为结果而不是 NULL
,正如您想要的结果。
SELECT PRGRP.No_,
COALESCE(PRGRP.SumAmount, 0) AS PRAmount,
COALESCE(SUM(IL.LineAmount), 0) AS ILAmount
FROM ( SELECT SO.No_, SUM(PR.Amount) AS SumAmount
FROM ServiceOrder SO
LEFT JOIN PreRecording PR
ON PR.No_ = SO.No_
GROUP BY SO.No_
) PRGRP
LEFT JOIN InvoiceHeader IH
ON IH.SO = PRGRP.No_
LEFT JOIN InvoiceLine IL
ON IL.DocNo_ = IH.No_
GROUP BY PRGRP.No_
结果:
关于多个表上的 SQL 求和函数和计数函数会产生相乘的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69831758/