मैं कोड को इस प्रकार लिखने का सुझाव दूंगा:
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)