Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL Server

คำสั่ง CASE ใน SQL Server

บทความนี้จะแสดงรายละเอียดวิธีใช้ฟังก์ชันจัดการคำสั่ง CASE ใน SQL Server พร้อมไวยากรณ์และตัวอย่างเฉพาะ เพื่อให้เห็นและเข้าใจฟังก์ชันได้ดีขึ้น

คำอธิบาย

คำสั่ง CASE ใช้ตั้งเงื่อนไขแบ่งทางใน SQL Server คล้ายกับฟังก์ชันของคำสั่ง IF-THEN-ELSE

CASE มี 2 รูปแบบ:

  1. ฟังก์ชัน CASE เรียบง่าย เรียกว่ Simple CASE
  2. ฟังก์ชัน CASE แบบค้นหา เรียกว่า Searched CASE

รายละเอียด:

  1. Simple CASE คือการเปรียบเทียบนิพจน์กับชุดนิพจน์เรียบง่ายเพื่อกำหนดผลลัพธ์
  2. Searched CASE คือการประเมินชุดนิพจน์ Boolean เพื่อกำหนดผลลัพธ์
  3. ทั้งสองรูปแบบรองรับอาร์กิวเมนต์ 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

พารามิเตอร์ :

  1. bieuthuc_dauvao: The นิพจน์ที่จะเปรียบเทียบกับแต่ละค่าที่ให้มา
  2. bieuthuc_1, bieuthuc_2, bieuthuc_n: นิพจน์ที่จะใช้เปรียบเทียบตามลำดับกับนิพจน์อินพุต เมื่อนิพจน์ตรงกับ bieuthuc_dauvao CASE จะดำเนินคำสั่งถัดไปและไม่เปรียบเทียบต่อ
  3. dieukien_1, dieukien_2, dieukien_n : เงื่อนไขที่ตรวจสอบ อนุมัติตามลำดับที่ระบุ เมื่อเงื่อนไขถูกกำหนดเป็นจริง CASE ส่งคืนผลลัพธ์และไม่ประเมินเงื่อนไขต่อไป ทุกเงื่อนไขต้องเป็นชนิดข้อมูลเดียวกัน
  4. ketqua_1, ketqua_2, ketqua_n : ผลลัพธ์ที่ส่งคืนหลังพิจารณาเงื่อนไขเป็นจริง ค่าทั้งหมดต้องเป็นชนิดข้อมูลเดียวกัน

หมายเหตุ :

  1. หากไม่พบ match สำหรับ TRUE คำสั่ง CASE จะส่งคืนผลลัพธ์ในคลอจ ELSE
  2. หากไม่มีคลอจ ELSE และไม่มีเงื่อนไข TRUE คำสั่ง CASE จะส่งคืน NULL
  3. เงื่อนไขประเมินตามลำดับที่ระบุ เมื่อเงื่อนไขถูกกำหนดเป็นจริง คำสั่ง CASE ส่งคืนผลลัพธ์และไม่ประเมินเงื่อนไขต่อไป
  4. CASE สามารถใช้ใน SQL Server รุ่นใหม่ๆ: 2017, 2016, 2014, 2012, 2008 R2, 2008, และ 2005

ตัวอย่าง

ดูและสำรวจตัวอย่างคำสั่ง CASE ใน SQL Server

ตัวอย่าง 1: Simple CASE

สมมติว่าคุณต้องการตรวจสอบส่วนของเว็บไซต์ TipsMake.com ตามคอลัมน์ Code ของตารางแปลง:

  1. ถ้า Code = '01' คือ 'Laptrinh-TipsMake.com'
  2. ถ้า Code = '02' คือ 'Congnghe-TipsMake.com'
  3. ถ้า Code = '03' คือ 'Cuocsong-TipsMake.com'
  4. ในทางกลับกัน นั่นคือไม่ใช่ 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