मैं कोड को इस प्रकार लिखने का सुझाव दूंगा:
SELECT SUM(dd.amt)
FROM db JOIN
dd
ON db.id = dd.dsba_id
WHERE dd.nd_id = xxxxxxx AND
dd.a_id = 'xxxxx-xx' AND
(db.v_id = xxxxxxxxx OR db.code = 'COMPLETE') AND
db.datet >= trunc(sysdate, 'YEAR');
इस प्रश्न के लिए, मैं निम्नलिखित पर अनुक्रमित करने का सुझाव दूंगा:
db(nd_id, a_id, id, datet, code)
dd(dsba_id, datet, v_id)
उपरोक्त क्वेरी में परिवर्तन:
- कभी नहीं
FROM
. में अल्पविराम का प्रयोग करें खंड। हमेशा उचित, स्पष्ट, मानक . का उपयोग करें , पठनीयJOIN
वाक्य - विन्यास। (हालांकि, यह प्रदर्शन को प्रभावित नहीं करता है।) decode()
बल्कि पालन करना कठिन है। एक साधारण बूलियनor
समतुल्य है।BETWEEN
यह मानकर अनावश्यक है किdatet
भविष्य में नहीं है।SUM(NVL())
इसकी आवश्यकता नहीं है, क्योंकिNULL
मूल्यों की उपेक्षा की जाती है। अगर आपNULL
के बारे में चिंतित हैं परिणाम, मैं सुझाव दूंगाCOALESCE(SUM(dd.amt), 0)