2009-07-23 15 views
111

में स्थिर 1 या 0 के साथ बस थोड़ा सा चयन करें यदि किसी चयन कथन में फ़ील्ड मान के रूप में उपयोग किए जाने पर थोड़ा सा 1 या 0 व्यक्त करना संभव है?SQL सर्वर

उदा।

इस मामले में कथन (जो एक चुनिंदा कथन का हिस्सा है) ICourseBased प्रकार int है।

case 
when FC.CourseId is not null then 1 
else 0 
end 
as IsCoursedBased 

इसे थोड़ा प्रकार प्राप्त करने के लिए मुझे दोनों मानों को डालना होगा।

case 
when FC.CourseId is not null then cast(1 as bit) 
else cast(0 as bit) 
end 
as IsCoursedBased 

क्या मूल्यों को हर बार डालने के बिना मूल्यों को व्यक्त करने का एक छोटा सा तरीका है?

उत्तर

156
cast (
    case 
    when FC.CourseId is not null then 1 else 0 
    end 
as bit) 

CAST spec "CAST (अभिव्यक्ति एएस प्रकार)" है। इस संदर्भ में CASE एक अभिव्यक्ति है।

यदि आपके पास ऐसे कई अभिव्यक्तियां हैं, तो मैं थोड़ा vars @true और @false घोषित करता हूं और उनका उपयोग करता हूं। या UDFs उपयोग करें यदि आप वास्तव में चाहते थे ...

DECLARE @True bit, @False bit; 
SELECT @True = 1, @False = 0; --can be combined with declare in SQL 2008 

SELECT 
    case when FC.CourseId is not null then @True ELSE @False END AS ... 
+1

एक नाइट, लाइन 5 पर "अन्य 0" होना चाहिए। –

+1

धन्यवाद। कितना मूर्ख ... – gbn

+1

कोड को और अधिक पठनीय बनाने के लिए हमने अपने एसक्यूएल को मानकीकृत किया और अब जब हम सही/गलत व्यक्त करने की आवश्यकता है तो घोषित बिट चर का उपयोग करें। –

5

नहीं (मैं एमएस SQL ​​सर्वर 2005 का उपयोग कर रहा है), लेकिन आप से है कि अभिव्यक्ति की उप घटकों बल्कि पूरे अभिव्यक्ति डाली सकता है। असल में, यह संभवतः कम इस मामले में पठनीय बनाता है।

1

दुर्भाग्य से, नहीं। आपको प्रत्येक मूल्य को व्यक्तिगत रूप से डालना होगा।

7

आप एक दृश्य में ICourseBased के लिए एक क्षेत्र परिभाषा के रूप में दूसरा टुकड़ा जोड़ सकते हैं।

DECLARE VIEW MyView 
AS 
    SELECT 
    case 
    when FC.CourseId is not null then cast(1 as bit) 
    else cast(0 as bit) 
    end 
    as IsCoursedBased 
    ... 

SELECT ICourseBased FROM MyView 
+0

थे, लेकिन यह नकारात्मक है कि कास्ट() एक पूर्ण प्रकार देता है। – Dan

3

थोड़ा अधिक GBN की तुलना में सघन:

मान लिया जाये कि CourseId गैर शून्य

CAST (COALESCE(FC.CourseId, 0) AS Bit) 

COALESCE एक ISNULL() की तरह है, लेकिन पहली गैर अशक्त देता है।

एक गैर शून्य CourseId, जबकि एक अशक्त CourseId अगले मान देने के लिए COALESCE कारण होगा, एक 1 के प्रकार कलाकारों मिल जाएगा 0

2

यदि आप चाहते हैं स्तंभ बीआईटी है और नहीं NULL, तो आप रखना चाहिए CAST से पहले ISNULL।

ISNULL(
    CAST (
     CASE 
     WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0 
     END 
    AS BIT) 
,0) AS IsCoursedBased 
0

IIF (FC.CourseId नहीं NULL, 1, IS 0)

+0

इस उत्तर को और अधिक उपयोगी बनाएं और लाइब्रेरी/दस्तावेज़ – happymacarts

+0

हैलो, और एसओ में आपका स्वागत है। कृपया अपना उत्तर समझाएं। – Chaithanya

0

इस :) कलाकारों के बिना प्रत्येक मान व्यक्तिगत रूप का आनंद लें।

SELECT ..., 
    IsCoursedBased = CAST(
     CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END 
    AS BIT 
) 
FROM fc