मेरे पास MySQL में दो टेबल हैं। पहला नाम, एक ग्राहक वैट नंबर, एक राशि, एक तिथि और मासिक नामक एक चर संग्रहीत करता है। दूसरी टेबल दूसरी टेबल की तरह ही चीजों को स्टोर करती है लेकिन वेरिएबल के बिना जिसे मासिक कहा जाता है। तो मेरा कोड है:

query = """SELECT sp.customer_surname, sp.amount, SUM(cp.amount), sp.monthly, sp.date_ 
FROM set_payment7777 sp 
INNER JOIN customers_payments7777 cp ON cp.customer_VAT = sp.customer_VAT
WHERE sp.date_ <= %s AND cp.date_ <= %s
GROUP BY sp.customer_VAT"""

mycursor.execute(query,(to_date,to_date,))
                    
for row in mycursor:
    if row[3].upper() == 'Y':
        final_amount = row[1] * ((to_date.year - row[4].year) * 12 + (to_date.month - row[4].month)) + row[1]
        final_subtraction = final_amount - row[2]
        file.write(f"{row[0]}\t{final_subtraction}\t")
        file.write("\n")
    else:
        final_subtraction = row[1] - row[2]
        file.write(f"{row[0]}\t{final_subtraction}\t")
        file.write("\n")

यह दो तालिकाओं में शामिल हो रहा है, दो तिथियों के बीच तालिकाओं की सभी मात्रा प्राप्त कर रहा है, और फिर यदि मासिक चर 'Y' पर सेट है (यह एक एनम है) तो यह पहली तालिका की मात्रा को उन महीनों से गुणा कर रहा है जो बीच में हैं दो तिथियां फिर उन्हें दूसरी तालिका की राशियों के योग से घटाती हैं। यदि चर 'एन' पर सेट है तो यह वही कर रहा है लेकिन तारीखों के बीच महीनों की संख्या से राशि को गुणा किए बिना। मेरी समस्या यह है कि यदि मेरे पास पहली तालिका में एक से अधिक प्रविष्टियां हैं तो यह केवल पहली प्रविष्टि के साथ ही काम करती है। उदाहरण के लिए, यदि मेरे पास पहली तालिका में 30 और 150 की मात्रा है और दूसरी तालिका में 25, 50, 25 की मात्रा है तो यह 30-100 = -70 लौटाएगा। मैं पहली तालिका की राशियों के योग का चयन कर सकता था लेकिन मैं नहीं चाहता क्योंकि तब मैं यह जाँच नहीं कर पाऊँगा कि चर Y या N पर सेट है या नहीं।

-1
SpaceProgrammer 25 पद 2021, 11:57

1 उत्तर

सबसे बढ़िया उत्तर

यह शायद शामिल होने के बजाय सहसंबद्ध क्वेरी के साथ सबसे अच्छा काम करेगा, ऐसा कुछ:

"""SELECT sp.customer_surname, sp.amount,
(Select SUM(cp.amount) from customers_payments7777 cp
where cp.customer_VAT = sp.customer_VAT AND sp.date_ <= %s AND cp.date_ <= %s
GROUP BY sp.customer_VAT) amountsum,
, sp.monthly, sp.date_ 
FROM set_payment7777 sp 
"""
0
Jayvee 25 पद 2021, 14:01