Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL Select dan Pernyataan IF()

Anda dapat menggabungkan kedua tabel, menggabungkan berdasarkan faktur, dan menggunakan sum() untuk menghitung total pembayaran. Akhirnya, sebuah case ekspresi dapat digunakan untuk menampilkan 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

Catatan:

  • left join memungkinkan faktur tanpa pembayaran apa pun dalam periode tersebut.

  • Saya menggunakan filter tanggal yang sama seperti pada kueri awal Anda, tetapi sedikit mengoptimalkannya dengan mengubahnya menjadi interval setengah terbuka.

  • Sepertinya Anda tidak memerlukan tabel invoicestatus untuk mencapai hasil yang Anda inginkan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan untuk menemukan tabel yang dimodifikasi dalam satu jam terakhir

  2. mysql timediff ke jam

  3. SQL :Menggunakan GROUP BY dan MAX pada banyak kolom

  4. Memilih kombinasi 2 kolom yang berbeda di mysql

  5. Bidang MySQL umum dan tipe data yang sesuai