2008-10-29 13 views
27

T-SQL में, आप यह कर सकते हैं:सम्मिलित विकल्प

SELECT ProductId, COALESCE(Price, 0) 
FROM Products 

तुम कैसे पहुँच एसक्यूएल में एक ही बात करते हैं? मैं वीबीए में एनजे के साथ ऐसा करने के लिए उदाहरण देखता हूं, लेकिन मैं एसक्यूएल समकक्ष की तलाश में हूं।

धन्यवाद।

उत्तर

21

एक्सेस एनजे फ़ंक्शन का समर्थन करता है और आपको इसे क्वेरी में उपयोग करने की अनुमति देता है। ध्यान दें कि एनजे टी-एसक्यूएल ISNULL फ़ंक्शन जैसा ही है। यह COALESCE कैन जैसे पैरामीटर की आर्बिटरी संख्या नहीं ले सकता है।

+13

"जेट (एक्सेस के पीछे डेटाबेस इंजन) एसक्यूएल भी एनजे फ़ंक्शन का समर्थन करता है" - गलत, जेट के पास कोई NZ() फ़ंक्शन नहीं है। एमएस एक्सेस ऑब्जेक्ट मॉडल में एक एनजेड() फ़ंक्शन है जिसका उपयोग केवल एमएस एक्सेस इंटरफ़ेस के भीतर क्वेरी में किया जा सकता है। एमएस एक्सेस इंटरफेस के बाहर एनजेड() का उपयोग करना एक त्रुटि का कारण बनता है। – onedaywhen

+0

मैंने अपना जवाब सही कर दिया है। – pipTheGeek

+1

किसी कारण से एनजेड ([फ़ील्ड], 0) आईआईएफ ([मूल्य] शून्य, 0, [मूल्य]) अच्छी तरह से काम कर रहा था, जबकि फ़ील्ड के प्रकार (परिणाम सेट में गठबंधन छोड़ दिया) बदल दिया। –

16

यदि यह एक पहुँच क्वेरी में है, तो आप इस कोशिश कर सकते हैं:

"Price = IIf([Price] Is Null,0,[Price])" 
+1

क्यों नहीं 'IIF (IsNull (मूल्य), 0, मूल्य) '? –

+0

आप क्वेरी में इसका उपयोग कैसे करेंगे? – Jon

+4

@ डेविड-डब्ल्यू-फेंटन: क्योंकि 'इस्नुल()' वीबीए है और धीमा हो जाता है, जबकि 'नल' को मूल रूप से जेट और सह द्वारा संभाला जाता है, मेरे जवाब में एलन ब्राउन के पेज से लिंक देखें। –

8

ऐसा लगता है कि मैं सिर्फ का उपयोग कर सकते हैं:

SELECT ProductId, Nz(Price, 0) 
FROM Products 

ठीक काम कर रहा है।

+1

आपको तर्क के परिणामी डेटा प्रकार के बारे में सावधान रहने की आवश्यकता है, क्योंकि जब आप इसकी उम्मीद करते हैं तो यह हमेशा संख्यात्मक नहीं होता है। मैंने कभी भी एक पैटर्न का पता नहीं लगाया है, हालांकि सैद्धांतिक रूप से, यह पहले तर्क के डेटा प्रकार को चुनना है। –

+1

इसके अलावा, प्रश्नों में वीबीए कार्यों का उपयोग करने के बारे में सावधान रहें, वे प्रदर्शन हत्यारे हो सकते हैं। – JohnFx

2

IsNull(), Nz(), और उपयोग करने से डेटा रूपांतरण कार्यों में निर्मित कर रहे हैं VBA कार्य करता है और केवल पूर्व 2003 जहां तक ​​डेटाटाइपिंग अपने डेटा प्रकार की गारंटी करने के CCur() का उपयोग हो जाता है के रूप में करने के लिए संस्करणों में आपके प्रश्नों धीमी हो जाएगी, लेकिन केवल आप अगर मजबूत तुलना करने की आवश्यकता है या प्रारूप संपत्ति को कॉलम पर मुद्रा में सेट करें। यह अगर बयान है कि चीजों को सबसे धीमा कर देती है, के रूप में यह अपनी दिनचर्या इस समाधान

उपयोग करने के लिए अभी तक एक और समारोह कहते है: Nz([Price], CCur(0))

केवल समय CCur() निष्पादित करेंगे तब होता है जब मूल्य शून्य है, इसलिए समग्र यह शायद है सबसे तेज़।

बिंदु यह है कि का उपयोग किए गए कुल कार्यों की कम से कम संख्या, आपके प्रश्नों को तेज़ी से निष्पादित किया जाएगा।

-1

COALESCE या NULLIF फ़ंक्शन मानक के लिए एक अच्छा माइग्रेशन के लिए SQL सर्वर पर मानक मानक उपयोग किया जाता है। ISNULLOR IIF या CHOOSE गैर मानक कार्य हैं।

4

Iif(Price is null, 0, Price) का उपयोग करके आपको सबसे अच्छा प्रदर्शन देना चाहिए (Allen Browne's performance tips देखें)। हालांकि SQL Server Coalesce() का Iif() और Nz() पर शानदार लाभ है कि यह एक कैस्केड में कई पैरामीटर को संभाल सकता है। इसलिए मैंने यह त्वरित वीबीए समकक्ष बनाया:

Function Coalesce(ParamArray varValues()) As Variant 
'returns the first non null value, similar to SQL Server Coalesce() function 
'Patrick Honorez --- www.idevlop.com 
    Dim i As Integer 
    Coalesce = Null 
    For i = LBound(varValues) To UBound(varValues) 
     If Not IsNull(varValues(i)) Then 
      Coalesce = varValues(i) 
      Exit Function 
     End If 
    Next 
End Function 
संबंधित मुद्दे