สถานการณ์: แสดงนามสกุลถ้าชื่อเป็น John, มิฉะนั้นแสดงชื่อ
ใช้ CASE WHEN ใน SELECT เพื่อคืนค่าตามเงื่อนไข
ไวยากรณ์
SELECT CASE
WHEN condition THEN result1
ELSE result2
END AS alias
FROM yourTable
WHERE filter_condition;
ตัวอย่าง: ตาราง demo47
CREATE TABLE demo47 (
first_name VARCHAR(20),
last_name VARCHAR(20)
);
INSERT INTO demo47 VALUES
('John', 'Smith'), ('David', 'Miller'),
('John', 'Doe'), ('Chris', 'Brown');
ข้อมูล
+------------+-----------+ | first_name | last_name | +------------+-----------+ | John | Smith | | David | Miller | | John | Doe | | Chris | Brown | +------------+-----------+
คำสั่ง: กรองเฉพาะแถวที่มี 'John' ใน first_name หรือ last_name แล้วแสดง last_name ถ้าเป็น John มิฉะนั้น first_name
SELECT CASE
WHEN first_name = 'John' THEN last_name
ELSE first_name
END AS Result
FROM demo47
WHERE 'John' IN (first_name, last_name);
ผลลัพธ์
+--------+ | Result | +--------+ | Smith | | Doe | +--------+
คำอธิบาย
WHERE 'John' IN (first_name, last_name): กรองเฉพาะแถวที่มี 'John' อยู่ใน first_name หรือ last_name (ได้แถวที่ 1 และ 3)CASE WHEN first_name = 'John' THEN last_name ELSE first_name END: แถวที่ 1 (John Smith) → Smith, แถวที่ 3 (John Doe) → Doe
รูปแบบ CASE WHEN ทั้งหมด
Simple CASE (เปรียบเทียบค่าเดียว)
CASE column
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
Searched CASE (เงื่อนไขซับซ้อน)
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END
กรณีศึกษา: แทนค่า NULL
SELECT
COALESCE(first_name, 'Unknown') AS name,
CASE
WHEN last_name IS NULL THEN 'No Last Name'
ELSE last_name
END AS last_name_display
FROM demo47;
การ UPDATE ด้วย CASE WHEN
UPDATE demo47
SET first_name = CASE
WHEN first_name = 'John' THEN 'Jonathan'
WHEN first_name = 'Bob' THEN 'Robert'
ELSE first_name
END;