sql >> Databáze >  >> RDS >> Mysql

Příkaz MySQL Select a IF().

Obě tabulky můžete spojit, agregovat podle faktury a použít sum() pro výpočet celkové platby. Nakonec case výraz lze použít k zobrazení stavu:

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

Poznámky:

  • left join umožňuje faktury bez jakékoli platby v daném období.

  • Použil jsem stejné datové filtry jako ve vašich původních dotazech, ale trochu jsem je optimalizoval tak, že jsem je přepnul na polootevřené intervaly.

  • Nezdá se, že byste potřebovali tabulku invoicestatus abyste dosáhli požadovaného výsledku.




  1. Jak přesměrovat výstup DBMS_OUTPUT.PUT_LINE do souboru?

  2. Top 18 bezplatných a široce používaných, open source NoSQL databází

  3. Přehled funkce DBCC CheckDB

  4. Jak opravit „Server není nakonfigurován pro DATA ACCESS“ v SQL Server