Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Instrukcja MySQL Select i IF()

Możesz połączyć obie tabele, agregować według faktur i użyć sum() aby obliczyć całkowitą płatność. Wreszcie case wyrażenie może być użyte do wyświetlenia statusu:

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

Uwagi:

  • left join umożliwia faktury bez płatności w okresie.

  • Użyłem tych samych filtrów dat, co w oryginalnych zapytaniach, ale zoptymalizowałem je nieco, zmieniając je na interwały półotwarte.

  • Wygląda na to, że nie potrzebujesz tabeli invoicestatus aby osiągnąć pożądany rezultat.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak skonfigurować płynny nHibernate z MySQL?

  2. „pobierz” w PDO daje tylko jeden wynik

  3. Wstawianie wsadowe przy użyciu Native SQL w Hibernate

  4. Jak rozwiązać InnoDB:Nie można zablokować błędu mysql ./ibdata1?

  5. Codeigniter/PHP sprawdza, czy można połączyć się z bazą danych