Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL Select và Câu lệnh IF ()

Bạn có thể kết hợp cả hai bảng, tổng hợp theo hóa đơn và sử dụng sum() để tính toán tổng số tiền thanh toán. Cuối cùng, một case biểu thức có thể được sử dụng để hiển thị trạng thái:

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

Ghi chú:

  • left join cho phép xuất hóa đơn mà không cần thanh toán trong kỳ.

  • Tôi đã sử dụng các bộ lọc ngày tương tự như trong các truy vấn ban đầu của bạn, nhưng đã tối ưu hóa nó một chút bằng cách chuyển nó thành các khoảng thời gian nửa mở.

  • Có vẻ như bạn không cần bảng invoicestatus để đạt được kết quả bạn muốn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Cấp ** tất cả ** đặc quyền trên cơ sở dữ liệu

  2. Ruby on Rails 3 Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/tmp/mysql.sock' trên OSX

  3. Vệ sinh và xác thực biểu mẫu php

  4. Mysql ::Lỗi:Khóa được chỉ định quá dài; độ dài khóa tối đa là 1000 byte

  5. Lấy tên bảng từ cơ sở dữ liệu