मैं एक iSeries पर एक sql स्टेटमेंट चलाने की कोशिश कर रहा हूं जो मेरे द्वारा पास किए गए टाइप पैरामीटर के आधार पर रेटल्स को आउटपुट करेगा।

बस कहें कि mytable में फ़ील्ड 1 नामक फ़ील्ड है। फ़ील्ड 1 में Y, N और NULL मान हैं।

एक प्रकार का 'Y' केवल 'Y' मान लौटाना चाहिए। 'एन' का एक प्रकार 'वाई' मान नहीं लौटाना चाहिए। (अर्थात शून्य, एन और क्षेत्र में कोई अन्य कबाड़)

मैंने यह कोशिश की ...

        select *
          from mytable
          where field1 in case when :type = 'Y' then 'Y'
               else (select field1 from mytable where field1 <> 'Y') end

हालाँकि, यह काम नहीं करता है।

0
jax 20 सितंबर 2011, 09:09

1 उत्तर

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

मेरा मानना ​​​​है कि आप जिस तर्क की तलाश कर रहे हैं वह यह है:

SELECT *
FROM myTable
WHERE (:type = 'Y' AND field1 IS NOT null AND field1 = 'Y')
   OR (:type <> 'Y' AND (field1 IS null OR field1 <> 'Y'))

(इस तथ्य को ध्यान में रखें कि शॉर्ट-सर्किट लॉजिक SQL के साथ गारंटीकृत नहीं है...)

याद रखें कि null वास्तव में किसी भी चीज़ से तुलना नहीं करता है, और इस तथ्य को बताना सबसे अच्छा है कि आप वास्तव में इसे चाहते हैं (दूसरे मामले में)।

1
Clockwork-Muse 21 सितंबर 2011, 00:56