【发布时间】:2019-08-22 00:49:39
【问题描述】:
问题:
求每个客户的总订单金额和总付款的净余额。
涉及 4 个表:OrderDetails、Orders、Payments 和 Customer。
订单总量=订单数量*单价[in OrderDetails]
总付款=同一订单不同付款的总和。
Customers 链接到 Payments 和 Orders 与 CustomerNumber。 Orders 通过OrderNumber 链接到OrderDetails。
我尝试使用 INNER JOIN 函数连接 4 个表。
SELECT
c.customername,
SUM(od.quantityordered * od.priceeach) - SUM(p.amount) AS Net_Balance
FROM
(
(
orderdetails od
INNER JOIN orders o ON od.ordernumber = o.ordernumber
)
INNER JOIN customers c ON o.customernumber = c.customernumber
)
INNER JOIN payments p ON c.customernumber = p.customernumber
GROUP BY c.customername;
几乎所有客户的预期结果都应该是 0。
但是,我得到的是订单总额和支付总额乘以一些常数。具体来说,显示的总付款乘以每个订单的付款次数。
有人有什么办法可以救我一命吗?
【问题讨论】:
-
发生的情况是您将订单头寸与客户付款相结合。但它们的共同点是它们所指的顺序。单笔付款与单笔订单头寸无关。您真正想要做的是将客户的订单总额(通过汇总订单的头寸获得)与客户的付款(通过汇总付款获得)。请参阅 GMB 对此的回答。
-
为什么你在接受答案后删除了大部分问题的内容?我回滚到以前的版本。
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&可运行代码加上所需的输出加上清晰的规范和解释。最小意味着将最少的问题代码添加到最少的工作代码中。因此,给出您所展示的最少代码可以满足您的期望,并且在您出错的第一个地方提供最少的代码。 (调试基础。)
-
这是一个常见问题解答。在考虑发布之前,请始终使用谷歌搜索您的错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,有或没有您的特定字符串/名称,并阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。 PS 这似乎是一个常见的错误,人们希望加入一些聚合(每个都可能涉及加入),但他们错误地尝试先进行所有的加入,然后再进行所有的聚合。 PS Googe 'site:stackoverflow.com sql 多个聚合是错误的'--很多点击。
标签: sql ms-access many-to-many nested-queries