多くの支払いがあり、多くの請求書明細がある請求書テーブルがあります。請求書レコードの合計は、請求書明細(数量*価格)から算出されます。
未払いの残高のある請求書を返すクエリを作成しようとしています。
SELECT inv.id, MAX(inv.invoice_total) as "InvoiceTotal", SUM(pt.amount) AS "TotalPayments" FROM (
SELECT
i.id,
SUM( ili.price * ili.quantity ) as "invoice_total"
FROM
invoices i
JOIN invoice_line_items ili
on i.id = ili.invoice_id
GROUP BY i.id
) inv
LEFT JOIN payment_transactions pt
ON pt.invoice_id = inv.id
GROUP BY inv.id
ORDER BY inv.id DESC
最後の部分は、支払い合計が請求書の合計より少ないレコードのみを返すHAVINGを追加することでしたが、機能していません。
どうすればこれを達成できますか?私よりも簡単なアプローチはありますか?
これは機能するはずです:
SELECT inv.id, MAX(inv.invoice_total) as InvoiceTotal, SUM(pt.amount) AS "TotalPayments"
FROM (SELECT i.id, SUM( ili.price * ili.quantity ) as invoice_total
FROM invoices i JOIN
invoice_line_items ili
ON i.id = ili.invoice_id
GROUP BY i.id
) inv LEFT JOIN
payment_transactions pt
ON pt.invoice_id = inv.id
GROUP BY inv.id
HAVING COALESCE(SUM(pt.amount), 0) < MAX(inv.invoice_total)
ORDER BY inv.id DESC;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加