ل SQL Server 2000: عودة "صحيح" أو "كاذبة" على أساس أي 1 من 25 الأعمدة يجري "صحيح"
-
06-07-2019 - |
سؤال
ولقد لإنشاء استعلام الذي يتحقق عبر عدة أعمدة مختلفة، وإذا كان أي منهم 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