sql >> Database >  >> RDS >> Mysql

MySQL Select en IF()-instructie

U kunt beide tabellen samenvoegen, op factuur aggregeren en sum() . gebruiken om de totale betaling te berekenen. Eindelijk een case uitdrukking kan worden gebruikt om de status weer te geven:

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

Opmerkingen:

  • De left join staat facturen toe zonder enige betaling in de periode.

  • Ik heb dezelfde datumfilters gebruikt als in je oorspronkelijke zoekopdrachten, maar heb het een beetje geoptimaliseerd door het te veranderen in halfopen intervallen.

  • Het lijkt erop dat je tabel invoicestatus niet nodig hebt om het gewenste resultaat te bereiken.




  1. Twee kolommen als primaire sleutels in mysql?

  2. Is het mogelijk om een ​​door komma's gescheiden kolom op te vragen voor een specifieke waarde?

  3. Verbinding maken met MySQL met Microsoft .NET

  4. MySQL haalt laatste record op voor Groep