【发布时间】:2021-03-13 19:14:27
【问题描述】:
我是 MySQL 的新手,我需要帮助。我有一张桌子Invoices 和一张桌子Payments。我无法生成一份报告,该报告将显示以 In Full 支付的所有发票,或在 2019 年 12 月 31 日之前收到 Partial Payment 的所有发票。一张发票可以通过一笔或多笔付款来支付(例如,部分付款,例如 25% 的首付,其余部分在工作完成时付款)。如何创建 SQL 查询,从 Invoices 中选择所有记录,然后为每个 Invoice 选择匹配的 Payment,将其与 Invoice Total 进行比较并显示 Paid in Full 或 partial Payment?我有以下代码:
SELECT Invoices.InvoiceID, Invoices.ClientName, Invoices.InvoiceTotal
INNER JOIN InvoiceStatus ON InvoiceStatus.InvoiceStatusID = Invoices.InvoiceStatus
WHERE InvoiceDate BETWEEN '2019-1-1 00:00:00' AND '2019-12-31 23:59:59'
AND (Invoices.InvoiceStatus = '1' OR Invoices.InvoiceStatus = '2')
AND (Invoices.InvoiceActive != 0 OR Invoices.InvoiceActive IS NULL)
ORDER BY ClientName
SELECT Payment.PaymentID, Payment.PaymentReceivedAmount, Payment.PaymentReceivedDate FROM `Payment`
INNER JOIN Invoices ON Invoices.InvoiceID = Payment.InvoiceID
WHERE PaymentReceivedDate BETWEEN '2019-1-1 00:00:00' AND '2019-12-31 23:59:59'
如果我执行INNER JOIN,那么我会得到两行以支付两次付款的发票。我知道我还需要执行 IF() 语句来显示 Paid in Full 和 Partial Payment 但我有点迷茫。任何帮助将不胜感激!
【问题讨论】:
-
您的查询错过了 FROM,肯定不会运行。另外描述与代码不匹配,请改进。
标签: mysql sql sum left-join aggregate-functions