PDA

View Full Version : مقاله: کاربرد CASE در عبارت SELECT



محمد سلیم آبادی
دوشنبه 12 مرداد 1388, 14:38 عصر
از آنجایی که دیدم CASE در دستور SELECT چه اهمیتی دارد، بر آن شدم که یک مقاله هر چند کم در این مورد بنویسم.

این مقاله شامل 5 مثال می باشد که با استفاده از CASE به سادگی و زیبایی حل می شوند.

امید وارم که مفید واقع شود.

Rejnev
دوشنبه 12 مرداد 1388, 16:40 عصر
ممنون
ولی ای کاش یکروز زودتر میذاشتیش

محمد سلیم آبادی
جمعه 16 مرداد 1388, 02:50 صبح
مثال تکمیلی :
نام ملبانانی را بدست آورید که
یک : با قایق شماره 1 دو بار سفر کرده باشند.
دو: با قایق شماره 2 سه بار سفر کرده باشند.
سه: با قایق شماره 3 اصلا سفر نکرده باشند.
چهار: در روز های 1 و یا 2 سفری نکرده باشند.



SELECT SailorID
FROM Travels t
GROUP BY SailorID
HAVING SUM(CASE WHEN Boatid=1 THEN 1 ELSE 0 END)=2
AND SUM(CASE WHEN Boatid=2 THEN 1 ELSE 0 END)=3
AND MAX(CASE WHEN Boatid=3 THEN 1 ELSE 0 END)=0
AND MAX(CASE WHEN [day] IN(1,2) THEN 1 ELSE 0 END)=0

ali_ahr7
پنج شنبه 19 فروردین 1389, 17:47 عصر
جناب msalim سلام.من مقالتون رو خوندم.ولي فك كنم يه چيز رو متوجه نشدم:
معتي عبارت:


CASE WHEN Boatid=1 THEN 1 ELSE 0 END

معني قسمت دوم رو ميخوام.آيا عبارت case يه عبارت دو وضعيتيه كه false , true برميگردونه؟
منتظر جوابتون هستم.

محمد سلیم آبادی
پنج شنبه 19 فروردین 1389, 18:04 عصر
سلام،
مطالب از Books Online:

Evaluates a list of conditions and returns one of multiple possible result expressions.
CASE has two formats:
The simple CASE function compares an expression to a set of simple expressions to determine the result.

The searched CASE function evaluates a set of Boolean expressions to determine the result.

Both formats support an optional ELSE argument.
Transact-SQL Syntax Conventions
Syntax

Simple CASE function:
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
Searched CASE function:
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END



همانطور که مشاهده می کنید عبارت/تابع CASE دو نوع فرمت داره. که من از نوع Searched اش استفاده کرده ام.
به زبان ساده، اگر شرط اول درست بود مقدار بعد از THEN انتخاب می شه در غیر اینصورت شرط دوم چک میشه اگر درست بود انتخاب همینطور تا آخر و در نهایت مقدار بعد از ELSE انتخاب میشه. البته ELSE اختیاری هست. در صورتی که ELSE نداشته باشیم و هیچ کدام از عبارت های بولین هم TRUE نشه مقدار NULL برگردانده خواهد شد.