2013-02-17 6 views
13

क्या एमडी एक्सेस के लिए ओडीबीसी CASE WHEN क्लॉज का समर्थन करता है? क्या कोई अन्य डेटाबेस है जो CASE WHEN खंड का समर्थन नहीं करता है? ओडीबीसी के साथ एमएस एक्सेस से कनेक्ट करते समय मैंने निम्नलिखित क्वेरी की कोशिश की लेकिन अपवाद प्राप्त किया।क्या ओएसबीसी के साथ कनेक्ट होने पर एमएस एक्सेस समर्थन "केस कब" खंड है?

SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '(CASE WHEN (AGE > 10) THEN 1 ELSE 0 END)'

मैं एक आम तरीका है जो डेटाबेस के अधिकांश के लिए काम करता है (गणना) नए 'बूलियन स्तंभ' एक तुलना अभिव्यक्ति के साथ उत्पन्न करने के लिए ODBC के साथ कनेक्ट करते समय खोजने की कोशिश। दरअसल, एमएस एक्सेस SELECT क्लॉज में तुलना का समर्थन करता है, लेकिन कुछ अन्य डेटाबेस के लिए सीएएसई क्लॉज की आवश्यकता होती है। एमएस एक्सेस के लिए, एसक्यूएल

SELECT AGE > 10 FROM demo

हो सकता है लेकिन अन्य लोगों में यह आप Access का उपयोग कर रहे हैं के बाद से क्वेरी की रचना करने

SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo

+0

मुझे याद है कि आपने 'केस' के बजाय एमएस एक्सेस में 'आईआईएफ' का उपयोग किया था (जो ओडीबीसी के लिए विशिष्ट नहीं है, केवल सामान्य एक्सेस चीज)। –

+0

हां, लेकिन 'आईआईएफ' एमएस एक्सेस विशिष्ट है। मैं यह सुनिश्चित करना चाहता हूं कि एमएस एक्सेस के लिए ओडीबीसी समर्थन 'केस' है या नहीं। – Aaron

+3

ओडीबीसी का उपयोग करके बयान भेजते समय आपको लक्ष्य डेटाबेस द्वारा समर्थित SQL का उपयोग करना होगा। एमएस एक्सेस केस स्टेटमेंट का समर्थन नहीं करता है, इसलिए एमएस एक्सेस के लिए ओडीबीसी कनेक्शन उन्हें "समर्थन" नहीं कर सकते हैं। –

उत्तर

9

आप अगले उदाहरण की तरह IIF बयान इस्तेमाल कर सकते हैं:

SELECT 
    IIF(test_expression, value_if_true, value_if_false) AS FIELD_NAME 
FROM 
    TABLE_NAME 
22

होने के लिए है, तो आप प्रवेश के संस्करण के लिए छड़ी करने के लिए है एसक्यूएल का

कई अलग-अलग रिटर्न मानों के बीच चयन करने के लिए, स्विच() फ़ंक्शन का उपयोग करें। तो अनुवाद और अपना उदाहरण थोड़ा सा:

select 
    switch(
    age > 40, 4 
    , age > 25, 3 
    , age > 20, 2 
    , age > 10, 1 
    , true, 0 
) 
from demo 

'सत्य' केस डिफ़ॉल्ट है। यदि आपके पास यह नहीं है और अन्य मामलों में से कोई भी मैच नहीं है, तो फ़ंक्शन शून्य हो जाएगा।

Office website पर इस पर दस्तावेज़ है लेकिन उनका उदाहरण वाक्यविन्यास वीबीए है और यह भी गलत है। मैंने उन्हें इस पर प्रतिक्रिया दी है लेकिन आपको उपर्युक्त उदाहरण के बाद ठीक होना चाहिए।

+1

'स्विच()' मेल खाने वाली पहली शर्त को आवंटित मान देता है। तो यदि उम्र 40 है, तो वह अभिव्यक्ति वापस आ जाएगी 1. इसके बजाय उम्र घटने से शर्तों का आदेश दें। लेकिन हम यह भी नहीं जानते कि क्या हारून एक से अधिक स्थितियों का मूल्यांकन करना चाहता है। – HansUp

+0

@ हंसअप - इसे पकड़ने के लिए धन्यवाद! * अपने माथे को झुकाव * और हाँ, हम नहीं जानते कि वह कई मामलों को चाहता है, लेकिन मैं सिंटैक्स का एक सामान्य रूप दिखाना चाहता था और वह अतिरिक्त मामलों को हटा सकता है जिनकी उन्हें आवश्यकता नहीं है। – Yawar

+0

@Yawar @HansUp धन्यवाद दोस्तों, मैं एक आम तरीका खोजने की कोशिश करता हूं जो तुलनात्मक अभिव्यक्ति के साथ नए 'बूलियन कॉलम' उत्पन्न करने (गणना) करने के लिए अधिकांश डेटाबेस के लिए काम करता है।असल में, एमएस एक्सेस 'SELECT' खंड में तुलना का समर्थन करता है, लेकिन कुछ अन्य डेटाबेस के लिए' केस 'खंड की आवश्यकता होती है। एमएस एक्सेस में, एसक्यूएल 'चयन एज> 10 से डेमो' हो सकता है, लेकिन दूसरों में इसे 'चयन (केस जब (एजीई> 10) फिर 1 ईएलएसई 0 ईएनडी' होना चाहिए 'डेमो' – Aaron

0

मैं पहुंच एसक्यूएल में एक समान परिणाम बनाने के लिए एक से अधिक IIF बयान का उपयोग करने के लिए किया है।

IIf([refi type] Like "FHA ST*","F",IIf([refi type]="VA IRRL","V")) 

शेष शेष शून्य रहेंगे।

संबंधित मुद्दे