Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL सेलेक्ट और 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. PHP के mysql_ फ़ंक्शंस को बहिष्कृत क्यों किया जाता है?

  2. mysql के लिए अद्वितीय पहचानकर्ता के रूप में एकाधिक कॉलम का प्रयोग करें

  3. हैशटैग के लिए MySQL पूर्ण-पाठ खोज (सूचकांक में # चिह्न सहित)

  4. MySQL डेटा प्रकार:जानें कि किसका उपयोग करना है और कैसे

  5. यह 7 दिन पहले का डेटा क्यों नहीं खींच रहा है?