บทความนี้จะแสดงรายละเอียดวิธีใช้ฟังก์ชันจัดการคำสั่ง CASE ใน SQL Server พร้อมไวยากรณ์และตัวอย่างเฉพาะ เพื่อให้เห็นและเข้าใจฟังก์ชันได้ดีขึ้น
คำอธิบาย
คำสั่ง CASE ใช้ตั้งเงื่อนไขแบ่งทางใน SQL Server คล้ายกับฟังก์ชันของคำสั่ง IF-THEN-ELSE
CASE มี 2 รูปแบบ:
- ฟังก์ชัน CASE เรียบง่าย เรียกว่ Simple CASE
- ฟังก์ชัน CASE แบบค้นหา เรียกว่า Searched CASE
รายละเอียด:
- Simple CASE คือการเปรียบเทียบนิพจน์กับชุดนิพจน์เรียบง่ายเพื่อกำหนดผลลัพธ์
- Searched CASE คือการประเมินชุดนิพจน์ Boolean เพื่อกำหนดผลลัพธ์
- ทั้งสองรูปแบบรองรับอาร์กิวเมนต์ ELSE (แต่ไม่จำเป็น)
ไวยากรณ์
เพื่อใช้คำสั่ง CASE ใน SQL Server เราใช้ไวยากรณ์ดังนี้:
Simple CASE
CASE bieuthuc_dauvao
WHEN bieuthuc_1 THEN ketqua_1
WHEN bieuthuc_2 THEN ketqua_2
.
WHEN bieuthuc_n THEN ketqua_n
ELSE ketqua_khac
END
หรือ Searched CASE
CASE
WHEN dieukien_1 THEN ketqua_1
WHEN dieukien_2 THEN ketqua_2
.
WHEN dieukien_n THEN ketqua_n
ELSE ketqua_khac
END
พารามิเตอร์ :
- bieuthuc_dauvao: The นิพจน์ที่จะเปรียบเทียบกับแต่ละค่าที่ให้มา
- bieuthuc_1, bieuthuc_2, bieuthuc_n: นิพจน์ที่จะใช้เปรียบเทียบตามลำดับกับนิพจน์อินพุต เมื่อนิพจน์ตรงกับ bieuthuc_dauvao CASE จะดำเนินคำสั่งถัดไปและไม่เปรียบเทียบต่อ
- dieukien_1, dieukien_2, dieukien_n : เงื่อนไขที่ตรวจสอบ อนุมัติตามลำดับที่ระบุ เมื่อเงื่อนไขถูกกำหนดเป็นจริง CASE ส่งคืนผลลัพธ์และไม่ประเมินเงื่อนไขต่อไป ทุกเงื่อนไขต้องเป็นชนิดข้อมูลเดียวกัน
- ketqua_1, ketqua_2, ketqua_n : ผลลัพธ์ที่ส่งคืนหลังพิจารณาเงื่อนไขเป็นจริง ค่าทั้งหมดต้องเป็นชนิดข้อมูลเดียวกัน
หมายเหตุ :
- หากไม่พบ match สำหรับ TRUE คำสั่ง CASE จะส่งคืนผลลัพธ์ในคลอจ ELSE
- หากไม่มีคลอจ ELSE และไม่มีเงื่อนไข TRUE คำสั่ง CASE จะส่งคืน NULL
- เงื่อนไขประเมินตามลำดับที่ระบุ เมื่อเงื่อนไขถูกกำหนดเป็นจริง คำสั่ง CASE ส่งคืนผลลัพธ์และไม่ประเมินเงื่อนไขต่อไป
- CASE สามารถใช้ใน SQL Server รุ่นใหม่ๆ: 2017, 2016, 2014, 2012, 2008 R2, 2008, และ 2005
ตัวอย่าง
ดูและสำรวจตัวอย่างคำสั่ง CASE ใน SQL Server
ตัวอย่าง 1: Simple CASE
สมมติว่าคุณต้องการตรวจสอบส่วนของเว็บไซต์ TipsMake.com ตามคอลัมน์ Code ของตารางแปลง:
- ถ้า Code = '01' คือ 'Laptrinh-TipsMake.com'
- ถ้า Code = '02' คือ 'Congnghe-TipsMake.com'
- ถ้า Code = '03' คือ 'Cuocsong-TipsMake.com'
- ในทางกลับกัน นั่นคือไม่ใช่ 1 ถึง 3 แล้วอยู่ในส่วน 'Khoahoc-TipsMake.com'
SELECT tenchuyenmuc, Code
(CASE code
WHEN 01 THEN 'Laptrinh-TipsMake.com'
WHEN 02 THEN 'Congnghe-TipsMake.com'
WHEN 03 THEN 'Cuocsong-TipsMake.com'
ELSE 'Khoahoc-TipsMake.com'
END) AS Chuyenmuc
FROM chuyenmuc
ORDER BY Code
ผลลัพธ์ที่ส่งคืน:
tenchuyenmuc Code Chuyenmuc SQL Server 01 Laptrinh-TipsMake.com Linux 02 Congnghe-TipsMake.com Python 01 Laptrinh-TipsMake.com JavaScript 01 Laptrinh-TipsMake.com Android 02 Congnghe-TipsMake.com Giai tri 03 Cuocsong-TipsMake.com Cuocsong-TipsMake.com Science Curve 04 Khoahoc-TipsMake.com Kham pha Science 05 Khoahoc-TipsMake.comตัวอย่าง 2: Searched CASE
SELECT tenchuyenmuc,
CASE
WHEN code = 01 THEN 'Laptrinh-TipsMake.com'
WHEN code = 02 THEN 'Congnghe-TipsMake.com'
WHEN code = 03 THEN 'Cuocsong-TipsMake.com'
ELSE 'Khoahoc-TipsMake.com'
END
FROM chuyenmuc;
คุณอาจไม่ใช้เงื่อนไข ELSE เช่นนี้:
SELECT tenchuyenmuc, Code
(CASE code
WHEN 01 THEN 'Laptrinh-TipsMake.com'
WHEN 02 THEN 'Congnghe-TipsMake.com'
WHEN 03 THEN 'Cuocsong-TipsMake.com'
END) AS Chuyenmuc
FROM chuyenmuc
ORDER BY Code
หรือ:
SELECT tenchuyenmuc,
CASE
WHEN code = 01 THEN 'Laptrinh-TipsMake.com'
WHEN code = 02 THEN 'Congnghe-TipsMake.com'
WHEN code = 03 THEN 'Cuocsong-TipsMake.com'
END
FROM chuyenmuc;
เมื่อละเลยคลอจ ELSE หากไม่มีเงื่อนไขเป็นจริง คำสั่ง CASE ส่งคืน NULL
ตัวอย่าง 3: เปรียบเทียบสองเงื่อนไข
นี่คือตัวอย่างแสดงวิธีใช้คำสั่ง CASE เปรียบเทียบเงื่อนไขที่แตกต่าง:
SELECT
CASE
WHEN code < 2 THEN 'Laptrinh-TipsMake.com'
WHEN code = 2 THEN 'Congnghe-TipsMake.com'
END
FROM chuyenmuc;
จำไว้ว่าเงื่อนไขถูกเปรียบเทียบตามลำดับที่ระบุ เมื่อเงื่อนไขถูกกำหนดเป็นจริง คำสั่ง CASE จะส่งคืนผลลัพธ์ทันที และไม่มีเงื่อนไขอื่นถูกประเมิน ดังนั้นคุณต้องระมัดระวังเมื่อเลือกลำดับที่ระบุเงื่อนไขของคุณ
ดูตัวอย่างเฉพาะเจาะจงเพิ่มเติมของฟังก์ชัน CASE ใน SQL Server