Cách sử dụng Case when và Decode trong Oracle

Case when và Decode trong Oracle được sử dụng để viết những câu lệnh query tùy theo trường hợp mà trả về các kết quả khác nhau.
Cấu trúc như sau:

CASE [ expression ]

   WHEN condition_1 THEN result_1
   WHEN condition_2 THEN result_2
   ...
   WHEN condition_n THEN result_n

   ELSE result

END

Trong đó:

expression: Tùy chọn, nếu nhập vào thì nó sẽ được so sánh với các điều kiện condition_1, condition_2,...
condition_1, condition_2, ... condition_n: Điều kiện rẽ nhánh, bắt buộc phải cùng loại dữ liệu
result, result_1, result_2, ... result_n: Các kết quả trả về, bắt buộc phải cùng loại dữ liệu. Kết quả có điều kiện condition_x = true sẽ được trả về.

Ví dụ:

SELECT table_name,
CASE owner
  WHEN 'SYS' THEN 'The owner is SYS'
  WHEN 'SYSTEM' THEN 'The owner is SYSTEM'
  ELSE 'The owner is another value'
END
FROM all_tables;
SELECT table_name,
CASE
  WHEN owner='SYS' THEN 'The owner is SYS'
  WHEN owner='SYSTEM' THEN 'The owner is SYSTEM'
  ELSE 'The owner is another value'
END
FROM all_tables;

Khác với các hệ cơ sở dữ liệu khác, Oracle còn cung cấp 1 hàm nâng cao để sử dụng tương tự như case when, đó chính là hàm DECODE.
Cú pháp như sau:

DECODE( expression , condition_1 , result_1 [, condition_2 , result_2]... [, default result] )

Các tham số tương tự như hàm case when. Ví dụ sử dụng hàm DECODE như sau:

SELECT supplier_name,
DECODE(supplier_id, 10000, 'IBM',
                    10001, 'Microsoft',
                    10002, 'Hewlett Packard',
                    'Gateway') result
FROM suppliers;

Vậy chúng ta có 2 cách để sử dụng điều kiện rẽ nhánh trong query, và chúng ta có thể thấy hàm decode viết trông ngắn gọn hơn nhiều!