मुझे एक WHOSE
शर्त को CASE अभिव्यक्ति मैंने नीचे की कोशिश की, लेकिन मुझे तीसरे पंक्ति पर
=
संकेत पर एक त्रुटि मिलती है कृपया, क्या कोई मुझे एक ऐसी परिस्थिति के उदाहरणों को सही / इंगित कर सकता है?
WHERE जब @ Param1 IS null THEN ((@ Param1 = '(सभी)) या (@ परम 1 = '(तैयार)' और टी। कॉलम 1 नहीं ('डिस्स्कोप', 'डोन')) या (@ परम 1 = '(लंबित)' और 'टी। कॉलम 1 नहीं' ('डिसकोडेड', 'डोन') और टी। कॉलम 2 IN ('डीफ़ेर्ड', 'रिजेक्ट', 'रेडी फॉर टेस्ट')) या (@ परम 1 = टी। कॉलम 1) ELSE (टी। कॉलम 1 = 'डब्ल्यूआईपी' या टी। कॉलम 1 = 'शुरू नहीं किया गया') END
क्वेरी केवल प्रतिनिधित्व के लिए है। मैं एमएस एसक्यूएल 2008 आर 2 का उपयोग कर रहा हूं।
<पी > आप ज्यादातर एसक्यूएल बोलियों (एसक्यूएल सर्वर सहित) में
मामले
के अंदर स्थितियों को नहीं रख सकते हैं। सामान्य तौर पर, यदि आप केस
का उपयोग में कर रहे हैं < / कोड> खंड सभी पर, आप एक खराब समाधान का पीछा कर रहे हैं। ऐसा करने का सही तरीका बूलियन तर्क का उपयोग करके पूरी चीज़ को फिर से लिखना है: WHERE (@ परम 1 शून्य और ( @ परम 1 इन ('(सभी)', टी सी 0 स्तंभ 1) या (@ परम 1 = '(तैयार)' और 'टीकोल 1' में ('डिस्क्ड', 'डोन')) या (@ परम 1 = '(लंबित)' और 'टीकॉल 1 एन' ('डिस्क्ड', 'डोन') और t.column2 IN ('deferred', 'rejected', 'test for test'))) या (@ परम 1 नल और टीकॉल 1 इन ('डब्ल्यूआईपी', 'शुरू नहीं'))
< / पूर्व> उस बात के लिए, जाँच कर रही है कि अगर @ परम 1 शून्य नहीं है तो यह बिल्कुल व्यर्थ है। चूंकि null = anything
हमेशा झूठी है, क्वेरी की पहली छमाही में सभी स्थितियों में @ Param1
शून्य है। इसे पूरा करना चाहिए जो आप अधिक सीधे-आगे के तरीके में करने का प्रयास कर रहे हैं:
WHERE @ Param1 IN ('(All)', t.column1) या (@ परम 1 = '(तैयार) 'और' 1 '(' डिस्क्ड ',' डोन ') और टीकॉल 2 इन (' डीफ़र्ड ') (' डिस्स्कोप ',' डोन ')) या (@ परम 1 =' (लंबित) 'और' ',' अस्वीकृत ',' रेडी फॉर टेस्ट ')) या (@ परम 1 नल और टीकॉल 1 इन (' डब्ल्यूआईपी ',' आरंभ नहीं '))
No comments:
Post a Comment