คำสั่ง CASE ใน SQL ใช้เพื่อสร้างเงื่อนไขแบบ IF-ELSE ภายในคำสั่ง SELECT, UPDATE, หรือ ORDER BY โดยสามารถใช้ตรวจสอบเงื่อนไขและคืนค่าที่แตกต่างกันแล้วแต่กรณี
รูปแบบคำสั่ง
SELECT
column,
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END AS alias_name
FROM table_name;
WHEN= เงื่อนไขTHEN= ค่าที่จะแสดงถ้าเงื่อนไขเป็นจริงELSE= ค่าที่จะแสดงถ้าไม่มีเงื่อนไขใดเป็นจริงEND= สิ้นสุดCASE- สามารถตั้งชื่อ alias ได้
ตัวอย่างการใช้งาน
แสดงระดับของยอดชำระเงิน (amount) จากตาราง payment
SQL
SELECT payment_id, amount,
CASE
WHEN amount < 5 THEN 'Low'
WHEN amount BETWEEN 5 AND 10 THEN 'Medium'
ELSE 'High'
END AS payment_level
FROM payment;- ตรวจสอบแต่ละแถวของ
amount - แบ่งออกเป็น 3 กลุ่ม
- น้อยกว่า 5 =
'Low' - ระหว่าง 5 ถึง 10 =
'Medium' - มากกว่า 10 =
'High' - ผลลัพธ์จะมีคอลัมน์ใหม่ชื่อ
payment_level
แสดงข้อความแทนค่าความยาวของภาพยนตร์
SQL
SELECT title, length,
CASE
WHEN length >= 120 THEN 'ยาวมาก'
WHEN length >= 90 THEN 'ปานกลาง'
ELSE 'สั้น'
END AS length_description
FROM film;- จัดกลุ่มภาพยนตร์ตามความยาว และแสดงคำอธิบายแทนตัวเลข
- ถ้ายาว 120 นาทีขึ้นไป แสดงคำว่า ยาวมาก
- ถ้ายาว 90 นาทีขึ้นไป แต่ไม่ถึง 120 นาที แสดงคำว่า ปานกลาง
- ถ้าไม่เข้าเงื่อนไข 2 ข้อข้างต้น แสดงคำว่า สั้น
- ผลลัพธ์จะอยู่ที่คอลัมน์
length_descriptionซึ่งตั้งชื่อขึ้นมาใหม่
ใช้กับ ORDER BY
SQL
SELECT title, rating
FROM film
ORDER BY
CASE
WHEN rating = 'G' THEN 1
WHEN rating = 'PG' THEN 2
ELSE 3
END;- เรียงลำดับแบบกำหนดเอง โดยจัด
Gไว้ก่อนPGแล้วจึงเป็นเรตอื่น ๆ
ใช้ใน UPDATE (เปลี่ยนค่าแบบมีเงื่อนไข)
SQL
UPDATE payment
SET amount =
CASE
WHEN amount < 5 THEN amount + 1
ELSE amount
END;- เพิ่มเงิน 1 ดอลล่าร์ให้เฉพาะรายการที่มียอดน้อยกว่า 5 ดอลล่าร์