ل SQL Server 2000: عودة "صحيح" أو "كاذبة" على أساس أي 1 من 25 الأعمدة يجري "صحيح"

StackOverflow https://stackoverflow.com/questions/1615780

سؤال

ولقد لإنشاء استعلام الذي يتحقق عبر عدة أعمدة مختلفة، وإذا كان أي منهم 1، أريد أن أعود صحيح.

وسيكون الناتج المثالي أن يكون على غرار:

وID: 55
الاسم: فلان الفلاني
IsDealerType1: صحيح
IsDealerType2: صحيح
IsDealerType3: خطأ
IsDealerType4: خطأ
IsDealerType5: صحيح

والمشكلة هي، بدلا من هذه الأعمدة تاجر 5، لدي حوالي 20 أعمدة اسمه 1A، 1B، 1C، 1D، وما إذا كان أي من الأعمدة "1" هو صحيح، ثم IsDealerType1 يجب أن يكون صحيحا.

وأنا أحاول تجنب كتابة شيء في رمز VB.NET للتحقق كل عمود، لمجرد أن القبح المطلق يجب أن يكون من السهل تجنب في SQL - لو كنت أعرف فقط كيف نفعل ذلك - ولكن أنا غير متأكد من كيفية بناء الاستعلام. لقد كنت تحاول أشياء من هذا القبيل ...

SELECT id, 
      name, 
      (1a or 1b or 1c or 1d) as IsDealerType1, 
      (2a or 2b or 2c or 2d) as IsDealerType2 
where id = 55

... ولكن من الواضح، أنا لا أفعل ذلك الحق.

وهو محل تقدير أي مساعدة. شكرا!

هل كانت مفيدة؟

المحلول

وأنا أحب لروسيل، ولكن أنا ستعمل إضافة هذا أيضا:

CASE WHEN 1 IN (1a,1b,1c,1d) THEN 1 ELSE 0 END As IsDealerType1

نصائح أخرى

CASE WHEN (1A 1B + + + 1C 1D)> 0 THEN 1 ELSE 0 END كما IsDealerType1

استخدم في SQL أحادي المعامل OR المشغل. تتجنب المقارنات ويلقي.

مثال: إجابات جويل يمر صحيح 1 أو 0 إلى العميل، حيث كنت تتوقع يمكن القول بت (منطقية). إجابات ريموس "تحتاج يلقي والمقارنات.

SELECT id, 
      name, 
      (1a | 1b | 1c | 1d) as IsDealerType1, 
      (2a | 2b | 2c | 2d) as IsDealerType2 
where id = 55

في SQL أنواع BIT لا يمكن استخدامها في التعبيرات المنطقية (دي يا !!)، فإنها تحتاج إلى أن مقارنة مع [إينتس]:

SELECT id, name, 
   cast(
    case when ([1a]=1 or [1b]=1 or [1c]=1 or [1d]=1) then 1 else 0 end
    as bit) as IsDealerType1,
    cast(case when ([2a]=1 or [2b]=1 or [2c]=1 or [2d]=1) then 1 else 0 end
    as bit) as IsDealerType2 
from [table]
where id = 55
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top