الشرط CASE في SQL
< SQL
اذهب إلى التنقل
اذهب إلى البحث
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
تستخدم لاختبار شرط معين بشكل مشابه لتعليمات if/else
في لغات البرمجة الأخرى لتعيد أحد التعابير الممكنة، وتكون البنية العامة لها بالشكل الآتي:
CASE WHEN condition THEN result
[WHEN ...]
[ELSE result]
END
إذ تعبر الكلمة condition
عن الشرط المُختبَر، وكلمة result
عن التعبير المُعاد.
مثال
ليكن الجدول الآتي students
موجودًا في قاعدة البيانات:
GPA | Age | Name | StudentID |
---|---|---|---|
3.68 | 25 | Mona | 1024 |
3.57 | 24 | Radi | 1081 |
2.50 | 25 | Leen | 1012 |
4.00 | 26 | Sarah | 1085 |
1.96 | 22 | Amin | 1066 |
2.87 | 23 | Yusuf | 1056 |
إن تنفيذ استعلام SELECT
الآتي:
SELECT Name, Result =
CASE
WHEN GPA = 4 THEN 'A+'
WHEN GPA > 3.7 THEN 'A'
WHEN GPA > 3.3 THEN 'A-'
WHEN GPA > 3 THEN 'B+'
WHEN GPA > 2.7 THEN 'B'
WHEN GPA > 2.3 THEN 'B-'
WHEN GPA > 2 THEN 'C+'
WHEN GPA > 1.7 THEN 'C'
WHEN GPA > 1.3 THEN 'C-'
WHEN GPA > 1 THEN 'D+'
WHEN GPA > 0 THEN 'D'
ELSE 'F'
END
FROM students;
سيظهر الأحرف التقييميّة بحسب القيمة الموجودة في عمود GPA وذلك بالاعتماد على الشرط المُختبَر في حالات CASE
، لتظهر النتائج الآتية:
Result | Name |
---|---|
B+ | Mona |
B+ | Radi |
C+ | Leen |
A+ | Sarah |
C- | Amin |
B- | Yusuf |
استخدام CASE مع العبارة ORDER BY
يمكن تحديد الترتيب ضمن عبارة ORDER BY
وفقًا لشرط محدد وذلك باستخدام الكلمات المفتاحية CASE
و WHEN
و THEN
و END
.
مثال
إن كان الجدول الآتي rivers
موجودًا في قاعدة البيانات:
Continent | Outflow | LengthMiles | LengthKm | River | Serial |
---|---|---|---|---|---|
South America | Atlantic Ocean | 4345 | 6992 | Amazon | 1 |
Africa | Mediterranean | 4258 | 6853 | Nile | 2 |
North America | Gulf of Mexico | 3902 | 6275 | Mississippi | 3 |
Asia | Bohai Sea | 3395 | 5464 | Yellow River | 4 |
Africa | Atlantic Ocean | 2922 | 4700 | Congo | 5 |
Asia | Laptev Sea | 2736 | 4400 | Lena | 6 |
Africa | Gulf of Guinea | 2611 | 4200 | Niger | 7 |
Europe | Caspian Sea | 2266 | 3645 | Volga | 8 |
Asia | Andaman Sea | 1901 | 3060 | Salween | 9 |
لترتيب السجلات وفقًا لأطوالها في قارة Africa ووفقًا لأسمائها في القارات البقية، يُنفذ الاستعلام الآتي:
SELECT *
FROM rivers
ORDER BY
CASE Country
WHEN 'Africa' THEN length
ELSE Name
END;
وستظهر النتائج الآتية:
Continent | LengthKm | River |
---|---|---|
Africa | 4200 | Niger |
Africa | 4700 | Congo |
Africa | 6853 | Nile |
Asia | 4400 | Lena |
Asia | 3060 | Salween |
Asia | 5464 | Yellow River |
Europe | 3645 | Volga |
North America | 6275 | Mississippi |
South America | 6992 | Amazon |
التوافقية
SQLServer | SQLite | Oracle | PostgreSQL | MySQL |
---|---|---|---|---|
نعم | نعم | نعم | نعم | نعم |