Teradata - เคสและ COALESCE

บทนี้จะอธิบายถึงฟังก์ชัน CASE และ COALESCE ของ Teradata

นิพจน์กรณี

นิพจน์ CASE ประเมินแต่ละแถวเทียบกับเงื่อนไขหรือ WHEN clause และส่งกลับผลลัพธ์ของการจับคู่ครั้งแรก หากไม่มีการจับคู่ผลลัพธ์จากส่วน ELSE ที่ส่งกลับ

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของนิพจน์ CASE

CASE <expression> 
WHEN <expression> THEN result-1 
WHEN <expression> THEN result-2 

ELSE  
   Result-n 
END

ตัวอย่าง

พิจารณาตารางพนักงานต่อไปนี้

พนักงาน ชื่อจริง นามสกุล วันที่เข้าร่วม แผนก วันที่เกิด
101 ไมค์ เจมส์ 27/3/2548 1 1/5/1980
102 โรเบิร์ต วิลเลียมส์ 25/4/2550 2 5/3/1983
103 ปีเตอร์ พอล 21/3/2550 2 1/1/2553
104 อเล็กซ์ สจวร์ต 1/2/2561 2 11/6/1984
105 โรเบิร์ต เจมส์ 1/4/2561 3 1/12/1984

ตัวอย่างต่อไปนี้จะประเมินคอลัมน์ DepartmentNo และส่งกลับค่าเป็น 1 ถ้าหมายเลขแผนกคือ 1 ส่งคืน 2 ถ้าหมายเลขแผนกคือ 3; มิฉะนั้นจะคืนค่าเป็นแผนกที่ไม่ถูกต้อง

SELECT 
   EmployeeNo, 
CASE DepartmentNo 
   WHEN 1 THEN 'Admin' 
   WHEN 2 THEN 'IT' 
ELSE 'Invalid Dept'
   END AS Department 
FROM Employee;

เมื่อดำเนินการค้นหาข้างต้นจะสร้างผลลัพธ์ต่อไปนี้

*** Query completed. 5 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo    Department 
-----------   ------------ 
   101         Admin 
   104         IT 
   102         IT 
   105         Invalid Dept 
   103         IT

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

SELECT 
   EmployeeNo, 
CASE  
   WHEN DepartmentNo = 1 THEN 'Admin' 
   WHEN  DepartmentNo = 2 THEN 'IT' 
ELSE 'Invalid Dept' 
   END AS Department  
FROM Employee;

COALESCE

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

ไวยากรณ์

COALESCE(expression 1, expression 2, ....)

ตัวอย่าง

SELECT 
   EmployeeNo, 
   COALESCE(dept_no, 'Department not found') 
FROM  
   employee;

NULLIF

คำสั่ง NULLIF ส่งคืนค่า NULL ถ้าอาร์กิวเมนต์เท่ากัน

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของคำสั่ง NULLIF

NULLIF(expression 1, expression 2)

ตัวอย่าง

ตัวอย่างต่อไปนี้จะคืนค่า NULL ถ้า DepartmentNo เท่ากับ 3 มิฉะนั้นจะส่งคืนค่า DepartmentNo

SELECT 
   EmployeeNo,  
   NULLIF(DepartmentNo,3) AS department 
FROM Employee;

แบบสอบถามข้างต้นส่งคืนระเบียนต่อไปนี้ คุณสามารถเห็นพนักงานคนนั้น 105 มีแผนกเลขที่ เป็น NULL

*** Query completed. 5 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo      department 
-----------  ------------------ 
    101              1 
    104              2 
    102              2 
    105              ? 
    103              2