我有3个数据库表命名为Order_summary,Invoices,Payments
订单_摘要
| 身份证|order_ref|客户参考|
| --------------|--------------|--------------|
| 1| 10055|十五岁|
| 二|10056|二十四|
| 三|10057|二十六|
发票
| 身份证|order_ref|项目|速率|数量|
| --------------|--------------|--------------|--------------|--------------|
| 1| 10055|检测项目|一百|两点|
| 二|10055|检测项目|50块|一点|
| 三|10055|检测项目|两百|一点|
| 四个|10055|检测项目|六十五|三点|
| 五|10056|检测项目|十点|十点|
| 六|10056|检测项目|1065|两点|
| 七|10057|检测项目|560|六点|
| 八|10057|检测项目|十五点|一点|
| 九|10057|检测项目|六五二|两点|
| 10个|10057|检测项目|一百二十五|一点|
付款方式
| 身份证|order_ref|金额|参考文献|方法|
| --------------|--------------|--------------|--------------|--------------|
| 1| 10055| 50块|sds56s|现金|
| 二|10055|一百|21sdas|卡片|
| 三|10056|一千一百六十五点|54asdf|现金|
| 四个|10055|一百五十|asd5a|现金|
| 五|10057|五千|sd6fa|现金|
这里的表格内容不是真实的。结构是这样的。
当SUM(Invoices.rateqty)-(subtract)SUM(Payments.amount)时,我想JOIN返回到Order_summary表,该表大于零。
简单地说,我想过滤未完全支付的发票。
Order_summary中的order_ref列唯一。没有多个。发票中order_ref列有多个。付款中的order_ref列有多个。
结果应该如下所示。
| 身份证|order_ref|发票总额|付款总额|天平|
| --------------|--------------|--------------|--------------|--------------|
| 1| 10055| 645美元|三百|345|
| 二|10056| 2230.00|一千一百六十五点|1065|
|***| 10057| 4804.00|五千| -196.00 |
- 最后一个结果行不应出现在结果中。因为余额小于零。(发票已付)。
有人能帮我一下吗。我试过几个左关节和凝聚,但我没有成功。
SELECT os.*,
COALESCE(SUM(i.rate * i.qty), 0) AS invoice_total,
COALESCE(SUM(p.amount), 0) AS payment_total,
COALESCE(SUM(i.rate * i.qty), 0) - COALESCE(SUM(p.amount), 0) AS balance
FROM Order_summary os
LEFT JOIN invoices i ON i.order_ref = os.order_ref
LEFT JOIN Payments p ON p.order_ref = os.order_ref
GROUP BY os.order_ref
尝试了这个和SUM(付款。金额)和SUM(发票。率 * 发票。数量)列显示非常大的值是不正确的。
1条答案
按热度按时间ma8fv8wu1#
下面的代码工作。我终于找到了解决办法。