आप इनवॉइस द्वारा एकत्रित, दोनों तालिकाओं में शामिल हो सकते हैं, और 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
की आवश्यकता है वांछित परिणाम प्राप्त करने के लिए।