Cách dùng lệnh CASE trong SQL Server có thể khá dễ dàng với những người nhiều kinh nghiệm. Tuy nhiên nếu bạn mới làm quen với phần mềm quản trị cơ sở dữ liệu này thì việc sử dụng lệnh CASE WHEN một cách linh hoạt trong từng trường hợp lại không hề đơn giản. Trong bài viết này, hãy cùng Ecci tìm hiểu một cách tường tận về lệnh CASE WHEN nhé.
Tổng quan về câu lệnh CASE WHEN trong SQL Server
CASE WHEN là câu lệnh giúp thiết lập điều kiện rẽ nhánh, có thể áp dụng được với các câu lệnh DML là UPDATE và SELECT. Về mặt chức năng, câu lệnh CASE khá giống với lệnh IF ELSE trong SQL.
Hàm CASE có 2 định dạng khác nhau đó là Simple CASE và Searched CASE. Mỗi hàm có ý nghĩa như sau:
- Simple CASE: Đây là hàm CASE dưới dạng đơn giản, được dùng vào mục đích so sánh giữa 1 biểu thức cụ thể và 1 bộ những biểu thức đơn giản để tìm ra kết quả.
- Searched CASE: Hàm CASE này có dạng tìm kiếm, được sử dụng để đánh giá 1 bộ các biểu thức Boolean để tìm ra kết quả.
Cách dùng lệnh CASE trong SQL Server kết hợp với lệnh SELECT
Khi kết hợp lệnh SELECT với CASE WHEN thì lệnh CASE-WHEN sẽ được trình bày ở cột riêng, người dùng có thể đặt bí danh tùy ý cho cột này. Có hai cú pháp khi sử dụng lệnh CASE WHEN cho SELECT đó là:
Cú pháp 1
SELECT Các_cột, Bí_danh = CASE Tên_cột
WHEN Giá_trị1 then Hiển_thị1
WHEN Giá_trị2 then Hiển_thị2
…
ELSE Hiển_thị
END
FROM Các_bảng_liên_kết [WHERE Điều_kiện];
Hoặc:
SELECT Các_cột, CASE Tên_cột
WHEN Giá_trị1 then Hiển_thị1
WHEN Giá_trị2 then Hiển_thị2
…
ELSE Hiển_thị
END AS Bí_danh
FROM Các_bảng_liên_kết [WHERE Điều_kiện];
Ví dụ:
Giả sử ta có bảng dữ liệu sau tên là Student:
studentid | studentname | gender |
1 | A | 1 |
2 | B | 0 |
3 | C | Null |
4 | A | 0 |
Nếu muốn hiển thị dữ liệu của toàn bộ bảng Student, trong đó cột gender hiển thị giá trị “Male” thay vì 1, “Female” thay vì 0 và “Unknown” thay vì Null, ta sẽ viết cú pháp như sau:
SELECT studentid, studentname, GENDER = CASE gender
WHEN 1 then ‘Male’
WHEN 0 then ‘Female’
ELSE ‘Unknown’
END
FROM Student;
Hoặc:
SELECT studentid, studentname, CASE gender
WHEN 1 then ‘Male’
WHEN 0 then ‘Female’
ELSE ‘Unknown’
END AS GENDER
FROM Student;
Sau khi nhập đúng cú pháp trên, bạn sẽ nhận được kết quả như sau:
studentid | studentname | gender |
1 | A | Male |
2 | B | Female |
3 | C | Unknown |
4 | A | Female |
Cú pháp 2
SELECT Các_cột, Bí_danh = CASE
WHEN Điều_kiện1 then Hiển_thị1
WHEN Điều_kiện2 then Hiển_thị2
…
ELSE Hiển_thị
END
FROM Các_bảng_liên_kết [WHERE Điều_kiện];
Hoặc:
SELECT Các_cột, CASE
WHEN Điều_kiện1 then Hiển_thị1
WHEN Điều_kiện2 then Hiển_thị2
…
ELSE Hiển_thị
END AS Bí_danh
FROM Các_bảng_liên_kết [WHERE Điều_kiện];
Ví dụ:
Muốn hiển thị bảng gồm tên khách hàng, số tiền mua hàng của mỗi khách hàng và cột Level dùng để phân loại khách hàng. Trong đó giá trị của cột Level tuân theo tiêu chí sau:
Nếu số tiền mua hàng của khách < 5000 => Điền “Level1”
Từ 5000 đến <10000 => Điền “Level2”
>=10000 => Điền “V.I.P”
Để giải quyết yêu cầu này, ta nhập cú pháp sau:
SELECT c.Ten, SUM(b.SoLuongMua * a.DonGia) AS [TongTienMua], [Level] = CASE
WHEN SUM(b.SoLuongMua * a.DonGia) < 5000 THEN ‘Level 1’
WHEN SUM(b.SoLuongMua * a.DonGia) >= 5000 AND SUM(b.SoLuongMua * a.DonGia) < 10000 THEN ‘Level 2’
WHEN SUM(b.SoLuongMua * a.DonGia) >= 10000 THEN ‘V.I.P’
ELSE ‘Unknown’
END
FROM Item a JOIN CustomerItem b ON a.MaHang=b.Mahang JOIN Customer c ON b.MaKhach=c.MaKhach
GROUP BY c.Ten;
Xem thêm: Tải IDM Full Crack mới nhất bản quyền vĩnh viễn link Drive
Cách dùng lệnh CASE trong SQL Server kết hợp với lệnh UPDATE
Khi cần điều chỉnh dữ liệu trong trường hợp có nhiều tính huống xảy ra thì có thể kết hợp lệnh UPDATE với CASE WHEN. Sau đây là cú pháp thực hiện:
Cú pháp 1
UPDATE Tên_bảng SET Tên_cột = CASE Tên_cột1
WHEN Giá_trị1 then Giá trị 1_1
WHEN Giá_trị2 then Giá trị 2_2
…
ELSE Giá_trị
END;
Cú pháp 2
UPDATE Tên_bảng SET Tên_cột = CASE
WHEN Điều_kiện1 then Giá trị 1_1
WHEN Điều_kiện2 then Giá trị 2_2
…
ELSE Giá_trị
END;
Những lưu ý về cách dùng lệnh CASE trong SQL Server
Kiểu dữ liệu
Những người mới làm quen với SQL Server hay mắc phải lỗi về kiểu dữ liệu. Khi so sánh sai kiểu dữ liệu thi câu lệnh Case When sẽ không hoạt động đúng cách. Thậm chí một số hệ cơ sở dữ liệu còn hiển thị kết quả “Invalid Input Syntax”.
Trước khi viết lệnh Case When để so sánh cột nào đó thì tốt nhất bạn nên mở bảng đó ra để kiểm tra kiểu dữ liệu trước khi thực hiện lệnh.
Dùng nhiều lệnh Case When trong SQL
Khi bạn sử dụng nhiều Case When hãy lưu ý rằng:
- Sau khi lệnh CASE WHEN đã đúng (true) và được thực thi, CASE sẽ quay lại đầu vòng lặp và kiểm tra tiếp hàng phía sau, bất chấp số lượng SQL bên dưới.
- Trong trường hợp WHEN được xác nhận là sai (false) thì CASE sẽ di chuyển đến CASE kế tiếp. Điều này có thể khiến cho performance bị ảnh hưởng nếu số lượng CASE WHEN cần check quá nhiều.
Không có ELSE
Một số bạn viết lệnh Case When nhưng hay bỏ qua trường hợp else. Điều này sẽ dẫn đến trường hợp sau:
Nếu không có ELSE và toàn bộ các điều kiện WHEN đều sai thì giá trị trả về sẽ là NULL.
Trên đây là cách dùng lệnh CASE trong SQL Server với các lệnh UPDATE và SELECT. Ecci sẽ còn cập nhật thêm nhiều bài viết hữu ích khác liên quan đến chủ đề SQL trên website Ecci.com.vn. Các bạn chú ý đón đọc để ngày càng hoàn thiện và nâng cao kỹ năng của mình nhé.
Có thể bạn cần: Link download, hướng dẫn cài đặt Photoshop CS6 mới nhất
Ban biên tập: Ecci.com.vn
Trả lời