sql >> Database teknologi >  >> RDS >> Mysql

MySQL Select og IF() Statement

Du kan tilslutte begge tabeller, aggregere efter faktura og bruge sum() at beregne den samlede betaling. Til sidst en case udtryk kan bruges til at vise status:

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

Bemærkninger:

  • left join tillader faktura uden betaling i perioden.

  • Jeg brugte de samme datofiltre som i dine oprindelige forespørgsler, men optimerede det lidt ved at ændre det til halvåbne intervaller.

  • Det ser ikke ud til, at du har brug for tabellen invoicestatus for at opnå det ønskede resultat.




  1. Ændringer til my.cnf træder ikke i kraft (Ubuntu 16.04, mysql 5.6)

  2. Bedømmelsessystem i PHP og MySQL

  3. Sjovt med Djangos nye Postgres-funktioner

  4. Hvordan kan man sammenkæde mange rækker med samme id i sql?