両方のテーブルを結合し、請求書ごとに集計して、sum()
を使用できます。 合計支払い額を計算します。最後に、case
式を使用してステータスを表示できます:
select i.invoiceid, i.clientname, i.invoicetotal,
coalesce(sum(p.PaymentReceivedAmount), 0) as paymenttotal,
case when i.invoicetotal <=> sum(p.PaymentReceivedAmount) then 'In Full' else 'Partial Payment' end as paymentstatus
from invoices i
left join payment p
on p.invoiceid = i.invoiceid
and p.paymentreceiveddate >= '2019-01-01' and p.paymentreceiveddate < '2020-01-01'
where
i.invoicedate >= '2019-01-01' and i.invoicedate < '2020-01-01'
and i.invoicestatus in (1, 2)
and (i.invoiceactive <> 0 or i.invoiceactive is null)
group by i.invoiceid
order by clientname
注:
-
left join
期間中の支払いなしで請求書を許可します。 -
元のクエリと同じ日付フィルターを使用しましたが、半分開いた間隔に変更することで少し最適化しました。
-
テーブル
invoicestatus
は必要ないようです 希望する結果を達成するために。