2011-06-07 18 views
5

मेरे पास एक साधारण SQL क्वेरी (SQL सर्वर 2005) है जहां मैं एक तालिका से चयन कर रहा हूं जिसमें कई कॉलम हैं जिनमें बीआईटी मान हैं। ये कॉलम शून्य हैं, जिनमें 0, 0 या 30 0 शामिल हैं।टीएसक्यूएल - कई कॉलम पर ISNULL

इन कॉलमों की एक उचित संख्या है और मेरी क्वेरी में मैं शून्य वापस करना चाहता हूं यदि मान शून्य है। मैं वर्तमान में तो जैसे IsNull उपयोग कर रहा हूँ:

SELECT Name, Age, ISNULL(LikesOranges,0), ISNULL(LikesApples,0), ISNULL(LikesPears,0) 
FROM FoodPreferences 

जैसा कि मैंने उल्लेख किया है, इन बीआईटी कॉलम (ऊपर सरल उदाहरण में अधिक से अधिक) के एक बहुत हैं। वहाँ एक रास्ता मैं उपयोग कर सकते हैं है IsNull इस तरह से अधिक एकाधिक स्तंभों:

SELECT ISNULL(*,0) FROM FoodPreferences 

ऊपर क्वेरी काम नहीं करता है, लेकिन आप मुझे क्या करना कोशिश कर रहा हूँ मिल - तो मैं एक IsNull बयान लिखने के लिए होने से बचने कर सकते हैं प्रत्येक कॉलम के लिए,

धन्यवाद।

+0

आप स्तंभों की जरूरत नल होने के लिए है? – codeulike

+0

हां, मैं किसी भी तरह से तालिका को संशोधित करने में सक्षम नहीं हूं –

उत्तर

7
उत्पन्न करके चयन खंड उत्पन्न कर सकते हैं

इसलिए मैं ISNU लिखने से बच सकता हूं प्रत्येक कॉलम के लिए एलएल स्टेटमेंट,

इस क्वेरी को चलाएं और परिणाम को अपने चयन कथन में कॉपी करें। system_type_id = 104bit कॉलम पर परिणाम फ़िल्टर करें।

select stuff((select ', isnull('+name+', 0)' 
       from sys.columns 
       where object_id = object_id('FoodPreferences') and 
        system_type_id = 104 
       for xml path('')), 1, 1, '') 

परिणाम:

------------------------------------------------------------------------- 
isnull(LikesOranges, 0), isnull(LikesApples, 0), isnull(LikesPears, 0) 
+1

यह समस्या के लिए एक शानदार कामकाज है - यह इस तरह की रचनात्मक सोच है जो SO को इतना मूल्यवान संसाधन बनाता है। धन्यवाद। –

3

मुझे ऐसा नहीं लगता है। लेकिन एक विकल्प उस तालिका पर एक दृश्य बनाने के लिए हो सकता है और दृश्य में सभी ISNULL कथन डाल सकता है। कम से कम आपको इसे हर बार

उदाहरण के लिए ऐसा नहीं करना पड़ेगा।

CREATE VIEW vwFoodPreferences 
AS 
SELECT Name, 
     Age, 
     ISNULL(LikesOranges,0) AS LikesOranges, 
     ISNULL(LikesApples,0) AS LikesApples, 
     ISNULL(LikesPears,0) AS LikesPears 
FROM FoodPreferences 
2

दुर्भाग्यवश, सरल उत्तर no है।

आप गतिशील एसक्यूएल लिख सकता है, लेकिन जो कुछ भी होता है, जिसके परिणामस्वरूप अंतिम एसक्यूएल होने की ISNULL(a,0), ISNULL(b,0), ISNULL(c,0), ISNULL(d,0), etc

5

इस प्रयास करें होगा:

SELECT COALESCE(LikesOranges, LikesApples, LikesPears) AS MyBit FROM FoodPreferences 

यह पहली गैर-शून्य मान प्रदान करेंगे। यदि सभी फ़ील्ड न्यूल हैं तो नतीजा नल है।


अद्यतन:

और निष्कर्ष है:

SELECT ISNULL(COALESCE(LikesOranges, LikesApples, LikesPears),0) AS MyBit FROM FoodPreferences 
+1

यह नहीं पूछा गया है। प्रश्न प्रत्येक कॉलम डेटा को ISNULL पैरामीटर के रूप में प्राप्त करना था। – Dalex

+0

हां, लेकिन यह सिर्फ एक कदम दूर है।उन्हें अंत में भोजन पकाते हैं। :) – ibram

+0

मुझे लगता है कि वह मतलब है कि वह कई नल स्तंभ होते हैं, और चाहते हैं अलग से eahc स्तंभ पर एक IsNull (नहीं एक multicolumn सम्मिलित) वास्तव में हर स्तंभ नाम लिखे बिना है। – MatBailie

1

मुझे लगता है कि आप एक साधारण प्रोग्राम लिखने और सभी स्तंभों को पढ़ने का चयन करें और

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