- [TOOL] Chia sẻ phần mềm thay đổi thông tin cấu hình máy tính
- [C#] Hướng dẫn Export dữ liệu ra file Microsoft Word Template
- [C#] Chia sẻ source code tool kiểm tra domain website
- [C#] Hướng dẫn tạo file PDF sử dụng thư viện QuestPDF
- [C#] Hướng dẫn tạo ứng dụng dock windows giống Taskbar
- [C#] Chia sẻ source code sử dụng Object Listview trên Winform
- [VB.NET] Chia sẻ source code quản lý thu chi mô hình 3 lớp Winform
- [DATABASE] Xóa lịch sử danh sách đăng nhập tài khoản trên SMSS Sqlserver Management Studio
- [C#] Sử dụng FolderBrowserDialog Vista trên Winform
- [DEVEXPRESS] Chia sẻ tool Winform UI Templates Early Access Preview (EAP)
- [C#] Chia sẻ source code Spin Content (Trộn nội dung văn bản theo từ đồng nghĩa) trên Winform
- [VB.NET] Chia sẻ source code lịch âm dương và hẹn lịch nhắc việc
- [C#] Hướng dẫn đọc thông số thiết bị Thiết bị kiểm tra Pin (HIOKI BATTERY HiTESTER BT3562)
- [VB.NET] Hướng dẫn giải captcha sử dụng dịch vụ AZCaptcha API trên winform
- [C#] Hướng dẫn chứng thực đăng nhập ứng dụng bằng vân tay (Finger Print) trên máy tính
- [C#] Color Thief cách xuất màu sắc thiết kế từ hình ảnh
- [C#] Cách tạo bản quyền và cho phép dùng thử ứng dụng Winform
- [C#] Hướng dẫn sử dụng trình duyệt web Chrome convert HTML sang tập tin file PDF
- [C#] Kết nôi điện thoại Android, IOS với App Winform via Bluetooth
- [DATABASE] Cách query cộng trừ dồn dần trong Sqlserver
Hướng dẫn sử dụng CASE trong SQL
Trong SQL Sever, hàm CASE kiểm định giá trị dựa trên danh sách điều kiện đưa ra, sau đó trả về một hoặc nhiều kết quả. Ở bài này chúng tôi sẽ minh hoạ một số cách dùng khác nhau của hàm này trong những trường hợp khác nhau.
Phương thức 1: Cách dùng hàm CASE đơn giản
Đây là cách dùng phổ biến nhất của hàm case, trong đó bạn có thể tạo giá trị vô hướng dựa trên danh sách điều kiện đưa ra.
Giả sử chúng ta có bảng sau với các cột id (mã số nhân viên), [First name] (tên), [Last name] (họ) và gender (giới tính). Bây giờ, chúng ta muốn tạo thêm tiền tố (Mr, Ms) ở phía trước từng tên, dựa trên giá trị của cột Gender, thực hiện như sau:
use DemoDB
go
create table tbl_user(id int, Firstname varchar(50),
Lastname varchar(50), gender bit)
go
insert into tbl_user(id,Firstname , Lastname, gender)
values (1,'TONA','DINH','1')
go
insert into tbl_user(id,Firstname , Lastname, gender)
values (1,'Hằng','Phạm','0')
go
insert into tbl_user(id,Firstname , Lastname, gender)
values (1,'Beat','Bot','0')
go
insert into tbl_user(id,Firstname , Lastname, gender)
values (1,'Quốc Khánh','Lê','1')
go
insert into tbl_user(id,Firstname , Lastname, gender)
values (1,'Holiday','Today','0')
go
insert into tbl_user(id,Firstname , Lastname, gender)
values (1,'Valentine','Deft','0')
go
Bây giờ, tạo cột Fullname (họ tên đầy đủ) để xác định nên đặt tiền tố là “Mr.” hay “Ms.”, dựa vào giá trị trên cột Gender.
Select id,FullName = case Gender
when '1' then 'Mr. '+Firstname+ ' '+Lastname
when '0' then 'Ms. '+Firstname+ ' '+Lastname
end
from tbl_user
Kết quả nó sẽ như thế này
id FullName
1 Mr. TONA DINH
2 Ms. Hằng Phạm
3 Ms. Beat Bot
4 Mr. Quốc Khánh Lê
5 Ms. Holiday Today
6 Ms. Valentine Deft
Phương thức 2: Sử dụng hàm case đơn giản với mệnh đề ELSE
Nếu thêm một hàng với giá trị NULL vào cột gender, bạn sẽ không thấy có tên nào được trả về trong tập hợp kết quả.
Chèn hàng sau vào bảng tbl_user:
use DemoDB
go
insert into tbl_user(id,Firstname,Lastname, gender ) values (7,'Chi ca','Boom',NULL)
go
Bây giờ, tạo cột Fullname (họ tên đầy đủ) để xác định nên đặt tiền tố là “Mr.” hay “Ms.”, dựa vào giá trị trên cột Gender.
Select id,FullName = case Gender
when '1' then 'Mr. '+Firstname+ ' '+Lastname
when '0' then 'Ms. '+Firstname+ ' '+Lastname
end
from tbl_user
Và dưới đây là kết quả thu được:
id FullName
1 Mr. TONA DINH
2 Ms. Hằng Phạm
3 Ms. Beat Bot
4 Mr. Quốc Khánh Lê
5 Ms. Holiday Today
6 Ms. Valentine Deft
7 NULL
Tuy nhiên, chúng ta cần hiển thị Full Name (họ tên đầy đủ) của nhân viên, kể cả trong trường hợp không có giá trị trên Gender.
Để thực hiện điều này, bạn cần dùng hàm CASE với mệnh đề ELSE. Thực hiện truy vấn như sau:
Select id,FullName = case Gender
when '1' then 'Mr. '+ Firstname+ ' '+ Lastname
when '0' then 'Ms. '+ Firstname+ ' '+ Lastname
else Firstname+ ' '+ Lastname
end
from tbl_user
Kết quả:
id FullName
1 Mr. TONA DINH
2 Ms. Hằng Phạm
3 Ms. Beat Bot
4 Mr. Quốc Khánh Lê
5 Ms. Holiday Today
6 Ms. Valentine Deft
7 Chica Boom
Phương thức 3: Sử dụng hàm CASE khi có hai hoặc nhiều điều kiện trong danh sách
Trong hai ví dụ trên, bạn thấy rằng các điều kiện được xét đến hoặc là Male, Female, hay None. Tuy nhiên, trong nhiều trường hợp bạn sẽ cần sử dụng nhiều điều kiện, nhiều toán tử cùng lúc để trả về một giá trị.
Thêm cột MaritalStatus (tình trạng hôn nhân) vào bảng và update giá trị như bên dưới:
use DemoDB
go
alter table tbl_user add MaritalStatus varchar(1) -- S-Single M-Married
go
Update tbl_user set MaritalStatus ='S' where id in (2,3,5,6)
Update tbl_user set MaritalStatus ='M' where MaritalStatus is NULL
Go
Giả sử chúng ta muốn hiển thị tên nhân viên có tiền tố đứng trước giúp dễ dàng xác định tình trạng hôn nhân của họ. Thực hiện truy vấn như sau:
Select id,FullName = case
when Gender ='1' and maritalstatus ='S' then 'MR. '+Firstname+ ' '+Lastname
when Gender ='1' and maritalstatus ='M' then 'Mr. '+Firstname+ ' '+Lastname
when Gender ='0' and maritalstatus ='S' then 'Ms. '+Firstname+ ' '+Lastname
when Gender ='0' and maritalstatus ='M' then 'Mrs. '+Firstname+ ' '+Lastname
else Firstname+ ' '+Lastname
end
from tbl_user
Kết quả đạt được sẽ là:
1 Mr. TONA DINH
2 Ms. Hằng Phạm
3 Ms. Beat Bot
4 Mr. Quốc Khánh Lê
5 Ms. Holiday Today
6 Ms. Valentine Deft
7 Chica Boom
Kết luận
Ở phần một này chúng ta đã thấy một số ví dụ minh hoạ các cách sử dụng hàm CASE đơn giản trong truy vấn SQL. Ngoài ra ta có thể thay thế biểu thức điều kiện (trước THEN) bằng 1 phép tính để kiểm tra. VD: thêm một trường ngày sinh, sau đó ta có thể làm phép tính trừ ngày để kiểm tra xem tuổi của những người đó, và thực hiện những công việc tương ứng (sau THEN)... Cám ơn các bạn đã theo dõi bài viết này. Chúc các bạn thành công !
Mọi ý kiến xin để lại ở phần comment. Like và share để ủng hộ nhóm viết bài nhé.