PDA

View Full Version : ترکیب CASE WHEN و دیگر شرط ها



اوبالیت به بو
چهارشنبه 23 مرداد 1392, 09:33 صبح
درود بر شما

آیا می توان گفت:


SELECT * FROM t
WHERE
[Field1] = @Field1 AND
[Field2] = @Field2 AND
CASE WHEN @P <> THEN [Field3] = @Field4 END


می دونم که نمیشه. اما یه همچین منظوری دارم. چه راه حلی وجود داره؟

محمد سلیم آبادی
چهارشنبه 23 مرداد 1392, 11:52 صبح
چیزی شبیه به این:

SELECT * FROM t
WHERE
[Field1] = @Field1 AND
[Field2] = @Field2 AND
1 = CASE WHEN @P <> '' THEN CASE WHEN [Field3] = @Field4 THEN 1 ELSE 0 END
ELSE 1
END;

اوبالیت به بو
شنبه 26 مرداد 1392, 14:21 عصر
یعنی Case When در دو سطح انجام میشه؟

و اگر در Case When دوم شرط برقرار نباشه مقدار صفر برگشت داده میشه و میشه 1 مخالف 0

محمد سلیم آبادی
شنبه 26 مرداد 1392, 16:44 عصر
در اینجا CASE تو در تو داریم.
اگر پارامتر مورد نظر شما دارای مقدار نبود که هیچی 1 برگشت داده میشه. اگر پارامتر دارای مقدار بود سپس دوباره شرط دیگری بررسی میشه اگر شرط صحیح بود 1 برگردانده میشه در غیر اینصورت 0 برگشت داده میشه. و نتیجه با 1 مقایسه میشه.
پس دقیقه اون چیزی که مد نظر شما محقق میشه.

راه ساده تر اینه که پای Logic بیشتر وسط بکشیم. یعنی به این صورت:

AND
(
@P = ''
OR ([Field3] = @Field4)
)


در اینجا دو گزاره وجود داره که با عملگر منطقی OR با هم ترکیب شدن.
دو حالت داره: یکی اینکه پارامتر p مقدار نداره پس گزاره @p='' صحیح خواهد بود و سطر مورد نظر انتخاب میشه بدون نیاز به بررسی گزاره field=@field
حالت دوم زمانی است که پارامتر p مقدار داره پس گزاره @p='' غلط خواهد بود پس برای اینکه سطر مورد نظر انتخاب بشه لازمه که گزاره field=@field صحیح باشه.