Bài viết này sẽ hướng dẫn chi tiết cách sử dụng mệnh đề CASE trong SQL Server với cú pháp cụ thể và ví dụ để dễ hình dung và nắm bắt.
Mô tả
Mệnh đề CASE dùng để thiết lập điều kiện phân nhánh trong SQL Server, tương tự câu lệnh IF-THEN-ELSE.
CASE có 2 dạng:
- CASE đơn giản (Simple CASE).
- CASE tìm kiếm (Searched CASE).
Chi tiết:
- Simple CASE so sánh biểu thức đầu vào với tập biểu thức đơn giản để xác định kết quả.
- Searched CASE đánh giá tập biểu thức Boolean để xác định kết quả.
- Cả hai hỗ trợ mệnh đề ELSE (nhưng không bắt buộc).
Cú pháp
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
Hoặc 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
Tham số :
- bieuthuc_dauvao: biểu thức sẽ so sánh với từng giá trị cung cấp.
- bieuthuc_1, bieuthuc_2, bieuthuc_n: biểu thức so sánh lần lượt với biểu thức đầu vào. Khi khớp, CASE thực hiện câu lệnh tiếp theo và không so sánh thêm.
- dieukien_1, dieukien_2, dieukien_n: điều kiện xem xét, duyệt theo thứ tự liệt kê. Khi điều kiện true, CASE trả kết quả và không đánh giá thêm. Tất cả điều kiện phải cùng kiểu dữ liệu.
- ketqua_1, ketqua_2, ketqua_n: kết quả trả về khi điều kiện true. Tất cả giá trị phải cùng kiểu dữ liệu.
Lưu ý :
- Không tìm thấy match cho TRUE, CASE trả kết quả mệnh đề ELSE.
- Không có ELSE và không có điều kiện TRUE, CASE trả NULL.
- Điều kiện đánh giá theo thứ tự liệt kê. Khi true, trả kết quả ngay và không đánh giá thêm. Cần cẩn thận thứ tự liệt kê điều kiện.
- CASE dùng được trong SQL Server: 2017, 2016, 2014, 2012, 2008 R2, 2008, 2005.
Ví dụ
Ví dụ 1: Simple CASE
Giả sử cần kiểm tra chuyên mục TipsMake.com dựa trên cột Code:
- Code = '01' -> 'Laptrinh-TipsMake.com'.
- Code = '02' -> 'Congnghe-TipsMake.com'.
- Code = '03' -> 'Cuocsong-TipsMake.com'.
- Ngược lại -> '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
Kết quả:
| 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 | 03 | Cuocsong-TipsMake.com |
| Science Curve | 04 | Khoahoc-TipsMake.com |
| Kham pha Science | 05 | Khoahoc-TipsMake.com |
Ví dụ 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;
Cũng có thể bỏ 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
Hoặc:
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;
Khi bỏ ELSE, nếu không điều kiện nào true, CASE trả NULL.
Ví dụ 3: So sánh hai điều kiện
Ví dụ dùng CASE so sánh điều kiện khác nhau:
SELECT
CASE
WHEN code < 2 THEN 'Laptrinh-TipsMake.com'
WHEN code = 2 THEN 'Congnghe-TipsMake.com'
END
FROM chuyenmuc;
Nhớ điều kiện so sánh theo thứ tự liệt kê. Khi true, CASE trả kết quả ngay và không đánh giá điều kiện khác. Cần cẩn thận thứ tự liệt kê.
Xem thêm ví dụ cụ thể CASE trong SQL Server.