คำสั่ง CASE และกรณีที่ซ้อนกันใน SQL Server: ตัวอย่าง T-SQL

⚡ สรุปอย่างชาญฉลาด

CASE เป็นนิพจน์เงื่อนไขใน SQL Server ที่ส่งคืนค่าตามเงื่อนไขแรกที่ประเมินค่าเป็นจริง โดยมีรูปแบบการใช้งานทั้งแบบง่าย (Simple) และแบบค้นหา (Searched) รวมถึงการซ้อนภายใน IF…ELSE, UPDATE และ ORDER BY

  • 🧭 ค่าตามเงื่อนไข: นิพจน์ CASE จะส่งคืนค่าที่ขึ้นอยู่กับว่าเงื่อนไข WHEN ใดเป็นจริงก่อน
  • 1️⃣ กรณีตัวอย่างง่ายๆ: คำสั่ง CASE แบบง่ายจะเปรียบเทียบค่าหนึ่งกับรายการค่าต่างๆ และทำการตรวจสอบความเท่าเทียมกันสำหรับแต่ละเงื่อนไข WHEN
  • 🔎 กรณีที่ค้นหา: ฟังก์ชัน Searched CASE จะประเมินนิพจน์บูลีนแยกกันสำหรับแต่ละเงื่อนไข WHEN โดยรองรับช่วงและตัวดำเนินการความไม่เท่าเทียมกัน
  • ELSE เป็นตัวเลือกเสริม: เมื่อไม่มีเงื่อนไข WHEN ใดตรงกัน และละเว้นเงื่อนไข ELSE นิพจน์ CASE จะส่งคืนค่า NULL
  • 🪆 การทำรัง: คำสั่ง CASE สามารถซ้อนอยู่ภายในคำสั่ง CASE อื่น และซ้อนอยู่ภายในคำสั่ง IF…ELSE เพื่อใช้ตรรกะหลายระดับได้
  • 🔧 นอกเหนือจาก SELECT: นอกจากคำสั่ง SELECT แล้ว คำสั่ง CASE ยังสามารถทำงานร่วมกับคำสั่ง UPDATE และ ORDER BY เพื่อควบคุมการอัปเดตและการจัดเรียงแบบมีเงื่อนไขได้อีกด้วย

คำสั่ง CASE และคำสั่ง CASE ซ้อนใน SQL Server พร้อมตัวอย่าง T-SQL

ภาพรวมเคสในชีวิตจริง!

ในชีวิตจริง เราจะกระทำการต่างๆ กันไป ขึ้นอยู่กับผลลัพธ์ของสถานการณ์ที่แตกต่างกัน เพื่ออธิบายให้ชัดเจนยิ่งขึ้น ลองพิจารณาตัวอย่างด้านล่างนี้:

  • หากตั๋วเครื่องบินมีราคาต่ำกว่า $100 ฉันจะไปลอสแองเจลิส
  • ถ้าตั๋วเครื่องบินราคาอยู่ระหว่าง 100 ถึง 200 ดอลลาร์ ฉันจะไปนิวยอร์ก
  • ถ้าตั๋วเครื่องบินราคาอยู่ระหว่าง 200 ถึง 400 ดอลลาร์สหรัฐ ฉันจะไปเที่ยวยุโรป
  • มิเช่นนั้น ฉันคงเลือกที่จะไปเที่ยวสถานที่ท่องเที่ยวใกล้เคียงแทน

ลองพิจารณาแยกประเภทเงื่อนไขและการกระทำออกจากกันจากตัวอย่างข้างต้น:

เงื่อนไข – ตั๋วเครื่องบิน การกระทำจะเกิดขึ้นก็ต่อเมื่อเงื่อนไขเป็นจริงเท่านั้น
Less มากกว่า $ 100 เยี่ยมชมลอสแองเจลิส
ระหว่าง $ 100 ถึง $ 200 เยี่ยมชมนิวยอร์ก
ระหว่าง $ 200 ถึง $ 400 เที่ยวยุโรป
ไม่ตรงตามเงื่อนไขข้างต้น สถานที่ท่องเที่ยวใกล้เคียง

จากตัวอย่างข้างต้น เราจะเห็นว่าผลลัพธ์ของเงื่อนไขที่แตกต่างกันนั้นส่งผลต่อการกระทำที่แยกจากกัน ตัวอย่างเช่น นักท่องเที่ยวจะเดินทางไปนิวยอร์กก็ต่อเมื่อตั๋วเครื่องบินมีราคาอยู่ระหว่าง 100 ถึง 200 ดอลลาร์เท่านั้น ในทำนองเดียวกัน MSSQL คำสั่ง CASE ยังมีคุณสมบัติในการเรียกใช้คำสั่ง T-SQL ที่แตกต่างกันไปตามผลลัพธ์ของเงื่อนไขต่างๆ อีกด้วย

คำสั่ง CASE ใน SQL Server คืออะไร

คำชี้แจงกรณีใน SQL Server เป็นส่วนขยายของ ถ้า…อย่างอื่น คำสั่ง CASE แตกต่างจาก IF…ELSE ที่อนุญาตให้ใช้เงื่อนไขได้สูงสุดเพียงเงื่อนไขเดียวเท่านั้น CASE อนุญาตให้ผู้ใช้กำหนดเงื่อนไขได้หลายเงื่อนไขเพื่อดำเนินการต่างๆ ใน ​​MS SQL โดยจะส่งคืนค่าที่สอดคล้องกับเงื่อนไขที่ผู้ใช้กำหนด

เรามาเรียนรู้วิธีการใช้คำสั่ง CASE กัน SQL และแนวคิดของมันในหัวข้อต่อไปนี้ ใน MS SQL มี CASE สองประเภท:

  • กรณีที่เรียบง่าย
  • ค้นหา CASE

กรณีที่เรียบง่าย

ไวยากรณ์สำหรับกรณีง่ายๆ

CASE <Case_Expression>
     WHEN Value_1 THEN Statement_1
     WHEN Value_2 THEN Statement_2
     .
     .
     WHEN Value_N THEN Statement_N
     [ELSE Statement_Else]   
END AS [ALIAS_NAME]

ที่นี่:

  • พารามิเตอร์ Case_Expression ระบุถึงนิพจน์ที่จะถูกนำไปเปรียบเทียบกับ Value_1, Value_2 และอื่นๆ ต่อไป
  • พารามิเตอร์ Statement_1, Statement_2… แสดงถึงคำสั่งที่จะถูกดำเนินการหาก Case_Expression = Value_1, Case_Expression = Value_2 และอื่นๆ
  • โดยสรุป เงื่อนไขคือว่า Case_Expression เท่ากับ Value_N หรือไม่ และการกระทำคือการเรียกใช้ Statement_N หากผลลัพธ์ข้างต้นเป็นจริง
  • ALIAS_NAME เป็นตัวเลือกเสริม และเป็นชื่อแทนที่กำหนดให้กับผลลัพธ์ของคำสั่ง CASE ใน SQL Server โดยส่วนใหญ่จะใช้เมื่อเราใช้ CASE ในส่วน SELECT ของ SQL Server

กฎสำหรับกรณีธรรมดา

  • Simple Case อนุญาตให้ตรวจสอบความเท่าเทียมกันของ Case_Expression กับ Value_1 ถึง Value_N เท่านั้น
  • Case_Expression จะถูกเปรียบเทียบกับค่าตามลำดับ โดยเริ่มจากค่าแรก คือ Value_1 วิธีการดำเนินการมีดังนี้:
  • ถ้า Case_Expression เทียบเท่ากับ Value_1 ดังนั้นคำสั่ง WHEN…THEN เพิ่มเติมจะถูกข้ามไป และการดำเนินการ CASE จะสิ้นสุดทันที
  • ถ้า Case_Expression ไม่ตรงกับ Value_1 ระบบจะเปรียบเทียบ Case_Expression กับ Value_2 เพื่อหาค่าที่เท่ากัน กระบวนการเปรียบเทียบ Case_Expression กับค่าต่างๆ นี้จะดำเนินต่อไปจนกว่า Case_Expression จะพบค่าที่ตรงกันจากชุดของ Value_1, Value_2 และอื่นๆ ต่อไป
  • หากไม่มีสิ่งใดตรงกัน ระบบจะโอนการควบคุมไปยังคำสั่ง ELSE และจะทำการเรียกใช้ Statement_Else
  • ELSE เป็นทางเลือก
  • หากไม่มีคำสั่ง ELSE และ Case_Expression ไม่ตรงกับค่าใดๆ เลย ระบบจะแสดงค่า NULL

แผนภาพด้านล่างแสดงลำดับการทำงานของกรณีตัวอย่างแบบง่าย:

ผังงานแสดงขั้นตอนการประเมินค่า WHEN แต่ละค่าในคำสั่ง CASE แบบง่ายตามลำดับ

ตัวอย่าง

สมมติว่าเรามีตารางชื่อ 'Guruตาราง '99' ประกอบด้วยสองคอลัมน์ คือ Tutorial_ID และ Tutorial_name และสี่แถว ดังแสดงด้านล่าง เราจะใช้ตารางนี้ 'Guruตาราง 99 ในตัวอย่างต่อไปนี้

ตัวอย่าง Guruตารางที่ 99 ประกอบด้วยคอลัมน์ Tutorial_ID และ Tutorial_name และมีสี่แถว

แบบสอบถามที่ 1: SIMPLE CASE พร้อมตัวเลือก NO ELSE

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

ผลลัพธ์: แผนภาพด้านล่างอธิบายลำดับการทำงานของคำสั่ง SIMPLE CASE ที่ไม่มี ELSE

ผลลัพธ์ของการใช้คำสั่ง CASE แบบง่ายๆ โดยไม่มีคำสั่ง ELSE แสดงให้เห็นว่า... Description สำหรับ Tutorial_name แต่ละรายการ

คำถามที่ 2: กรณีง่ายๆ พร้อมตัวเลือก ELSE

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

ผลลัพธ์: แผนภาพด้านล่างอธิบายลำดับการทำงานของคำสั่ง SIMPLE CASE ที่มี ELSE ต่อท้าย

ผลลัพธ์ของการใช้คำสั่ง CASE แบบง่ายร่วมกับ ELSE ซึ่งจะส่งคืนข้อความเริ่มต้นสำหรับแถวที่ไม่ตรงกัน

ค้นหา CASE

ไวยากรณ์สำหรับกรณีที่ค้นหา

CASE 
     WHEN <Boolean_Expression_1> THEN Statement_1
     WHEN <Boolean_Expression_2> THEN Statement_2
     .
     .
     WHEN <Boolean_Expression_N> THEN Statement_N
     [ELSE Statement_Else]   
END AS [ALIAS_NAME]

ที่นี่:

  • พารามิเตอร์ Boolean_Expression_1… ระบุถึงนิพจน์ที่จะถูกประเมินค่าว่าเป็น TRUE หรือ FALSE
  • พารามิเตอร์ Statement_1, Statement_2… แสดงถึงคำสั่งที่จะถูกดำเนินการหากผลลัพธ์ของ Boolean_Expression_1 และ Boolean_Expression_2 ที่เกี่ยวข้องเป็น TRUE
  • โดยสรุป เงื่อนไขคือ Boolean_Expression_1… และการกระทำคือการดำเนินการตาม Statement_N หาก Boolean_Expression_1 ข้างต้นเป็นจริง
  • ALIAS_NAME เป็นตัวเลือกเสริม และเป็นชื่อแทนที่กำหนดให้กับผลลัพธ์ของคำสั่ง CASE โดยส่วนใหญ่จะใช้เมื่อเราใช้ CASE ในส่วน SELECT

กฎเกณฑ์สำหรับการสืบค้น

  • แตกต่างจาก Simple Case ตรงที่ Searched Case ไม่ได้จำกัดอยู่แค่การตรวจสอบความเท่าเทียมกันเท่านั้น แต่ยังอนุญาตให้ใช้ค่าบูลีนได้ด้วย
  • นิพจน์บูลีนจะถูกประเมินตามลำดับ โดยเริ่มจากนิพจน์บูลีนแรก นั่นคือ Boolean_Expression_1 วิธีการดำเนินการมีดังนี้:
  • ถ้า Boolean_Expression_1 เป็น TRUE ระบบจะข้ามคำสั่ง WHEN…THEN ต่อไป และการดำเนินการ CASE จะสิ้นสุดลงทันที
  • ถ้า Boolean_Expression_1 เป็น FALSE ระบบจะประเมิน Boolean_Expression_2 ว่าเป็นจริงหรือไม่ กระบวนการประเมินนิพจน์บูลีนนี้จะดำเนินต่อไปจนกว่านิพจน์บูลีนใดนิพจน์หนึ่งจะส่งคืนค่า TRUE
  • หากไม่มีสิ่งใดตรงกัน ระบบจะโอนการควบคุมไปยังคำสั่ง ELSE และจะทำการเรียกใช้ Statement_Else
  • เช่นเดียวกับ Simple Case คำสั่ง ELSE ใน Searched Case ก็เป็นตัวเลือกเสริมเช่นกัน
  • หากไม่มีคำสั่ง ELSE และไม่มีนิพจน์บูลีนใดส่งค่ากลับเป็น TRUE ระบบจะแสดงค่า NULL

แผนภาพด้านล่างแสดงขั้นตอนการทำงานของกรณีที่ค้นหา:

ผังงานแสดงขั้นตอนการประเมินนิพจน์บูลีนแต่ละรายการใน CASE ที่ค้นหาตามลำดับ

ตัวอย่าง

ข้อความค้นหา 1: ค้นหากรณีด้วยตัวเลือก NO ELSE

SELECT Tutorial_ID, Tutorial_name,
CASE 
 	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

ผลลัพธ์: แผนภาพด้านล่างอธิบายขั้นตอนการทำงานของคำสั่ง SEARCHED CASE โดยไม่มี ELSE

ผลลัพธ์ของการค้นหา CASE โดยไม่มี ELSE ซึ่งตรงกับ Tutorial_name แต่ละรายการ Descriptไอออน

แบบสอบถามที่ 2: ค้นหากรณีที่มีตัวเลือก ELSE

SELECT Tutorial_ID, Tutorial_name,
CASE 
	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

ผลลัพธ์: แผนภาพด้านล่างอธิบายลำดับการทำงานของคำสั่ง SEARCHED CASE ที่มี ELSE กำกับอยู่

ผลลัพธ์ของการค้นหา CASE ที่มี ELSE จะแสดงข้อความเริ่มต้นสำหรับภาษาที่ไม่ใช่ SQL

ความแตกต่างระหว่างวิธีการดำเนินการ: กรณีแบบง่าย (SIMPLE) และกรณีแบบค้นหา (SEARCH)

เรามาดูตัวอย่างกรณีง่ายๆ ด้านล่างนี้กัน:

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

ในที่นี้ 'Tutorial_name' เป็นส่วนหนึ่งของนิพจน์ CASE ใน SQL จากนั้นค่า 'Tutorial_name' จะถูกเปรียบเทียบกับค่า WHEN แต่ละค่า เช่น 'SQL'… จนกว่า 'Tutorial_name' จะตรงกับค่า WHEN ใดค่าหนึ่ง

ในทางตรงกันข้าม ตัวอย่าง SEARCH CASE ไม่มีนิพจน์ CASE:

SELECT Tutorial_ID, Tutorial_name,
CASE 
 	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

ในที่นี้ คำสั่ง WHEN แต่ละคำสั่งจะมีนิพจน์บูลีนแบบมีเงื่อนไขของตัวเอง โดยแต่ละนิพจน์บูลีน เช่น Tutorial_name = 'SQL'… จะถูกประเมินค่าเป็น TRUE/FALSE จนกว่าจะพบนิพจน์บูลีนแรกที่ประเมินค่าได้เป็น TRUE

ความแตกต่างระหว่างกรณีแบบง่ายและกรณีแบบค้นหา

กรณีที่เรียบง่าย ค้นหากรณี
คำหลัก CASE จะตามด้วย CASE_Expression ทันที และอยู่ก่อนคำสั่ง WHEN

เช่น:
กรณี
เมื่อ Value_1 แล้ว Statement_1...

คำหลัก CASE จะตามด้วยคำสั่ง WHEN และไม่มีนิพจน์ใดๆ อยู่ระหว่าง CASE และ WHEN

เช่น:
กรณีเมื่อ จากนั้น ข้อความที่ 1…

ในกรณีง่ายๆ จะมีค่า (Value) อยู่ค่าหนึ่งสำหรับคำสั่ง WHEN แต่ละคำสั่ง ค่าเหล่านี้ (Value_1, Value_2…) จะถูกเปรียบเทียบกับนิพจน์ CASE_Expression เดียวตามลำดับ ผลลัพธ์จะถูกประเมินว่าตรงตามเงื่อนไข TRUE/FALSE สำหรับคำสั่ง WHEN แต่ละคำสั่งหรือไม่

เช่น:
กรณี
เมื่อ Value_1 แล้ว Statement_1...
เมื่อ Value_2 แล้ว Statement_2...

ใน Searched Case จะมี Boolean_Expression สำหรับแต่ละคำสั่ง WHEN โดย Boolean_Expression เหล่านี้ (Boolean_Expression_1, Boolean_Expression_2…) จะประเมินเงื่อนไข TRUE/FALSE สำหรับแต่ละคำสั่ง WHEN

เช่น:
กรณี
เมื่อไร แล้วแถลงการณ์_1…
เมื่อไร แล้วแถลงการณ์_2…

กรณีแบบง่าย (Simple Case) รองรับเฉพาะการตรวจสอบความเท่าเทียมกันเท่านั้น กล่าวคือ ตรวจสอบว่า CASE_Expression = VALUE_1 หรือ VALUE_2…

เช่น:
กรณี เมื่อ Value_1 เป็นจริง แล้ว Statement_1…
ในตัวอย่างข้างต้น การดำเนินการเพียงอย่างเดียวที่ระบบทำคือการตรวจสอบว่า Case_Expression = Value_1 หรือไม่

ด้วย Boolean_Expression_N นั้น Searched Case จะรองรับการดำเนินการใดๆ ก็ตามที่ให้ผลลัพธ์เป็นค่าบูลีน ซึ่งรวมถึงตัวดำเนินการเท่ากับและไม่เท่ากับด้วย

เช่น:
กรณีเมื่อ จากนั้น ข้อความที่ 1…
ในตัวอย่างข้างต้น Boolean_Expression_1 สามารถประกอบด้วยตัวดำเนินการทั้ง 'เท่ากับ' และ 'ไม่เท่ากับ' เช่น A = B, A != B

CASE ที่ซ้อนกัน: CASE ใน IF ELSE

เราสามารถใช้ CASE ภายในคำสั่ง IF…ELSE ได้ เราประกาศตัวแปร ตัวแปร สำหรับตั๋วเครื่องบินและแยกสาขาตามมูลค่าของตั๋ว ตัวอย่างโค้ด MS-SQL มีดังนี้:

DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 190;
IF @Flight_Ticket > 400
   PRINT 'Visit Nearby Tourist Location';
ELSE 
BEGIN
    SELECT
	CASE 
	WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
	WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
	WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
	END AS Location	
END

ในตัวอย่างข้างต้น คำสั่ง CASE ถูกซ้อนอยู่ภายในคำสั่ง IF…ELSE โดยคำสั่ง IF จะทำงานก่อน และหากเงื่อนไข CASE ใน SQL Server เป็นเท็จ คำสั่ง ELSE ก็จะทำงาน ส่วน ELSE นั้นประกอบด้วยคำสั่ง CASE ที่ซ้อนอยู่ภายใน SQL ขึ้นอยู่กับค่าของตั๋วเครื่องบิน ผลลัพธ์อย่างใดอย่างหนึ่งต่อไปนี้จะปรากฏขึ้น:

  • ระบบจะแสดงข้อความ 'เยี่ยมชมสถานที่ท่องเที่ยวใกล้เคียง' หากราคาตั๋วเครื่องบินสูงกว่า 400 ดอลลาร์สหรัฐ
  • ระบบจะแสดงข้อความ 'เที่ยวลอสแอนเจลิส' หากราคาตั๋วเครื่องบินอยู่ระหว่าง 0 ถึง 100 ดอลลาร์สหรัฐ
  • ระบบจะแสดงข้อความ 'เที่ยวนิวยอร์ก' หากราคาตั๋วเครื่องบินอยู่ระหว่าง 101 ถึง 200 ดอลลาร์สหรัฐ
  • ระบบจะพิมพ์ข้อความ 'เที่ยวยุโรป' หากราคาตั๋วเครื่องบินอยู่ระหว่าง 201 ถึง 400 ดอลลาร์สหรัฐ

ผลลัพธ์ด้านล่างแสดงตำแหน่งที่ส่งคืนเมื่อคำสั่ง CASE ที่ซ้อนกันทำงานอยู่ภายในส่วน ELSE:

ผลลัพธ์จากคำสั่ง CASE ที่ซ้อนอยู่ภายในคำสั่ง IF…ELSE ซึ่งแสดงตำแหน่งการเข้าเยี่ยมชมสำหรับตั๋วใบนั้น

CASE ที่ซ้อนกัน: CASE ภายใน CASE

ใน SQL เราสามารถใช้คำสั่ง CASE ซ้อนกันได้ ตัวอย่างโค้ด MS-SQL มีดังนี้:

DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 250;
SELECT
CASE 
WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.'
WHEN @Flight_Ticket < 400 THEN 
    	CASE 
		WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
		WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
		WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
		END	
END AS Location

ในตัวอย่างข้างต้น คำสั่ง CASE ถูกซ้อนอยู่ภายในคำสั่ง CASE อีกคำสั่งหนึ่ง ระบบจะประมวลผลคำสั่ง CASE ภายนอกก่อน หาก Flight_Ticket น้อยกว่า 400 ดอลลาร์ คำสั่ง CASE ภายในจึงจะทำงาน ตำแหน่งที่ส่งคืนจะอยู่ในช่วงราคาตั๋วเดียวกันกับตัวอย่างก่อนหน้า ดังนั้นตั๋วราคา 250 ดอลลาร์จะอยู่ในช่วง 201-400 ดอลลาร์ และส่งคืน 'Visit Europe'

ผลลัพธ์ด้านล่างแสดงตำแหน่งที่ตั้งที่ได้จากคำสั่ง CASE ภายในสำหรับตั๋วราคา 250 ดอลลาร์:

ผลลัพธ์ของ CASE ที่ซ้อนอยู่ภายใน CASE อื่น ส่งผลให้ Visit Europe ได้รับตั๋วราคา 250 บาท

กรณีที่มีการอัปเดต

สมมติอีกครั้งว่าเรามี 'Guruตารางขนาด 99 ฟุต มีสองคอลัมน์และสี่แถว ดังแสดงในภาพด้านล่าง:

Guruตารางที่ 99 ก่อนการอัปเดต CASE แสดงค่า Tutorial_Name เดิม

เราสามารถใช้ CASE กับ UPDATE ได้ ด้านล่างนี้คือตัวอย่างโค้ด MS-SQL:

UPDATE Guru99
SET Tutorial_Name = 
	(
	CASE
	WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.'
	WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL'
	WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.'
	WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.'
	END
	)

ในตัวอย่างข้างต้น CASE ถูกใช้ในคำสั่ง UPDATE โดยค่าในคอลัมน์ Tutorial_Name จะถูกอัปเดตด้วยค่าจากคำสั่ง THEN ขึ้นอยู่กับค่าของ Tutorial_Name:

  • ถ้า Tutorial_Name = 'SQL' ให้เปลี่ยน Tutorial_Name เป็น 'Structured Query language'
  • ถ้า Tutorial_Name = 'PL/SQL' ให้อัปเดต Tutorial_Name เป็น 'Oracle พีแอล/เอสเค
  • ถ้า Tutorial_Name = 'MSSQL' ให้อัปเดต Tutorial_Name เป็น 'Microsoft SQL'
  • ถ้า Tutorial_Name = 'Hadoop' ให้ทำการอัปเดต Tutorial_Name เป็น 'Apache Hadoop'

การเรียกใช้คำสั่งจะอัปเดตแถวที่ตรงกัน ดังที่แสดงด้านล่าง:

ผลลัพธ์การดำเนินการของคำสั่ง CASE UPDATE บน Guruตาราง 99

เรามาสอบถาม 'Guruตาราง 99 เพื่อตรวจสอบค่าที่อัปเดตแล้ว:

Guruตารางที่ 99 หลังจากการอัปเดต CASE แสดงค่า Tutorial_Name ใหม่

กรณีที่มีการสั่งซื้อโดย

เราสามารถใช้คำสั่ง CASE ร่วมกับ ORDER BY ได้ ตัวอย่างโค้ด MS-SQL มีดังนี้:

Declare @Order Int;
Set @Order = 1
Select * from Guru99 order by 
CASE 
	WHEN @Order = 1 THEN Tutorial_ID
	WHEN @Order = 2 THEN Tutorial_Name
	END
DESC

ในที่นี้ ใช้คำสั่ง CASE ร่วมกับ ORDER BY โดยตั้งค่า @Order เป็น 1 และเนื่องจากนิพจน์บูลีน WHEN ตัวแรกประเมินค่าเป็น TRUE จึงเลือก Tutorial_ID สำหรับเงื่อนไข ORDER BY ผลลัพธ์แสดงอยู่ด้านล่าง:

ผลลัพธ์ของการใช้คำสั่ง ORDER BY ร่วมกับนิพจน์ CASE ในการเรียงลำดับ Guruตารางที่ 99 ตาม Tutorial_ID

ข้อเท็จจริงที่น่าสนใจ!

  • คำสั่ง CASE สามารถซ้อนอยู่ในคำสั่ง CASE อื่นได้ เช่นเดียวกับการใช้คำสั่ง IF…ELSE
  • นอกจากคำสั่ง SELECT แล้ว คำสั่ง CASE ยังสามารถใช้ร่วมกับคำสั่ง SQL อื่นๆ เช่น UPDATE และ ORDER BY ได้อีกด้วย

คำถามที่พบบ่อย

ฟังก์ชัน IIF() เป็นรูปแบบย่อของนิพจน์ CASE ที่มีผลลัพธ์สองอย่าง กล่าวคือ มันจะคืนค่าหนึ่งเมื่อเงื่อนไขเป็นจริง และอีกค่าหนึ่งเมื่อเป็นเท็จ นิพจน์ CASE แบบเต็มมีความยืดหยุ่นมากกว่าและสามารถทดสอบเงื่อนไข WHEN หลายๆ เงื่อนไขได้ในคำสั่งเดียว

ใช่แล้ว เนื่องจากคำสั่ง CASE ส่งค่ากลับมา จึงสามารถปรากฏในรายการ SELECT, เงื่อนไข WHERE, เงื่อนไข HAVING และ GROUP BY ได้ ในเงื่อนไข WHERE คำสั่ง CASE ช่วยให้คุณสามารถใช้ตรรกะการกรองที่แตกต่างกันได้ ขึ้นอยู่กับค่าในคอลัมน์อื่นๆ

ใช่แล้ว การวางนิพจน์ CASE ไว้ภายใน SUM(), COUNT() หรือ AVG() ดำเนินการรวมข้อมูลแบบมีเงื่อนไข โดยรวมหรือนับเฉพาะแถวที่ตรงกับเงื่อนไข WHEN แต่ละข้อ เทคนิคนี้มักใช้ในการสร้างรายงานสรุปแบบ Pivot

คำสั่ง COALESCE และ ISNULL จะคืนค่าที่ไม่ใช่ NULL ค่าแรกจากรายการเท่านั้น ในขณะที่คำสั่ง CASE มีขอบเขตการทำงานที่กว้างกว่า โดยจะประเมินเงื่อนไขบูลีนหรือการจับคู่ค่าใดๆ และคืนค่าผลลัพธ์ของสาขาแรกที่เป็นจริง

นิพจน์ CASE จะส่งคืนค่าประเภทข้อมูลเดียว SQL Server จะกำหนดประเภทข้อมูลนั้นจากลำดับความสำคัญของประเภทข้อมูลในผลลัพธ์ของ THEN และ ELSE แต่ละรายการ ดังนั้นทุกสาขาควรส่งคืนประเภทข้อมูลที่เข้ากันได้เพื่อหลีกเลี่ยงข้อผิดพลาดในการแปลง

ใช่แล้ว นิพจน์ CASE สามารถปรากฏในคำสั่ง SELECT ของวิว และที่ใดก็ได้ภายในโพรซีเดอร์ที่เก็บไว้ ฟังก์ชัน หรือทริกเกอร์ ไวยากรณ์ของนิพจน์เดียวกันนี้ใช้ได้กับวัตถุเหล่านี้ทั้งหมด

ใช่. นักบิน GitHub สามารถร่างนิพจน์ CASE แบบง่ายและแบบค้นหาได้ รวมถึง CASE แบบซ้อนกันและ CASE ภายใน UPDATE จากข้อความแจ้งภาษาธรรมชาติ ตรวจสอบเงื่อนไข WHEN ลำดับการแยกสาขา และการจัดการ ELSE ก่อนเรียกใช้คิวรีเสมอ

ปัญญาประดิษฐ์ (AI) และผู้ช่วยการเรียนรู้ของเครื่องจะแปลงกฎภาษาอังกฤษธรรมดาให้เป็นนิพจน์ CASE แบบง่ายหรือแบบค้นหา แนะนำสาขา WHEN ที่ขาดหายไป และระบุส่วนที่ซ้ำซ้อนping หรือเงื่อนไขที่ไม่สามารถเข้าถึงได้ นักพัฒนาจะตรวจสอบความถูกต้องของข้อเสนอแนะแต่ละข้อก่อนนำไปใช้งาน

สรุปโพสต์นี้ด้วย: