Mysql
 sql >> база данни >  >> RDS >> Mysql

Изявление на MySQL Select и IF().

Можете да присъедините двете таблици, да обобщите по фактура и да използвате sum() за изчисляване на общото плащане. И накрая, case изразът може да се използва за показване на състоянието:

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

Бележки:

  • left join позволява фактури без плащане в периода.

  • Използвах същите филтри за дата като в оригиналните ви заявки, но го оптимизирах малко, като го превърнах в полуотворени интервали.

  • Изглежда, че не се нуждаете от таблица invoicestatus за да постигнете желания резултат.




  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 blob?

  2. получаване на стойности, които не съществуват в таблицата на mysql

  3. Стартирайте localhost на mac OS X Yosemite

  4. Изтеглете файлове от базата данни MYSQL

  5. Как да създадете тригери за добавяне на промените в таблиците на регистрационния файл