الشرط CASE في SQL

من موسوعة حسوب
< SQL
مراجعة 14:51، 17 يناير 2018 بواسطة Nourtam (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

تستخدم لاختبار شرط معين بشكل مشابه لتعليمات 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
نعم نعم نعم نعم نعم

مصادر