Hàm CASE trong SQL Server 2005 (Phần 2)
Trong phn 1 của loạtiy chúng tôi đã gii thích các sử dụng hàm CASE
đơn giản trong truy vấn. Trong phần II này, chúng tôi sẽ tiếp tục thảo luận về
cách s dng hàm CASE trong một số trường hợp kc.
Phương thc 4: S dụng hàm CASE trong tìm kiếm
Gi sử cng ta bảng sau
use tempdb
go
if exists (select * from dbo.sysobjects
where id = object_id(N'[emp]') and OBJECTPROPERTY(id, N'IsUserTable')
= 1)
drop table [emp]
GO
create table Emp
(id int, [First name] varchar(50), [Last name] varchar(50), Salary money)
go
insert into Emp (id,[First name],[Last name], salary )
values (1,'John','Smith',120000)
insert into Emp (id,[First name],[Last name], salary )
values (2,'James','Bond',95000)
insert into Emp (id,[First name],[Last name], salary )
values (3,'Alexa','Mantena',200000)
insert into Emp (id,[First name],[Last name], salary )
values (4,'Shui','Qui',36000)
insert into Emp (id,[First name],[Last name], salary )
values (5,'William','Hsu',39000)
insert into Emp (id,[First name],[Last name], salary )
values (6,'Danielle','Stewart',50000)
insert into Emp (id,[First name],[Last name], salary )
values (7,'Martha','Mcgrath',400000)
insert into Emp (id,[First name],[Last name], salary )
values (8,'Henry','Fayol',75000)
insert into Emp (id,[First name],[Last name], salary )
values (9,'Dick','Watson',91000)
insert into Emp (id,[First name],[Last name], salary )
values (10,'Helen','Foster',124000)
go
gimuốn tạo thêm một cột Tax (thuế) dựa trên mức lương như sau
Select [id],[Full Name]=[First name]+ [Last name],Salary,Tax = case
When salary between 0 and 36000 then Salary*.24
When salary between 36000 and 450000 then Salary*.28
When salary between 45000 and 75000 then Salary *.30
When salary between 75000 and 150000 then Salary *.32
else Salary*.40 end
from Emp
m y scho kết qu:
id Full Name Salary Tax
----------- -------------------------------- ---------------------
1 JohnSmith 120000.00 33600.000000
2 JamesBond 95000.00 26600.000000
3 AlexaMantena 200000.00 56000.000000
4 ShuiQui 36000.00 8640.000000
5 WilliamHsu 39000.00 10920.000000
6 DanielleStewart 50000.00 14000.000000
7 MarthaMcgrath 400000.00 112000.000000
8 HenryFayol 75000.00 21000.000000
9 DickWatson 91000.00 25480.000000
10 HelenFoster 124000.00 34720.000000
Phương thc 5: S dụng hàm CASE trong mệnh đề ORDER BY
Gi sử cng ta bảng dưới trong Books:
use tempdb
go
if exists (select * from dbo.sysobjects where id = object_id(N'[Books]') and
OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [Books]
GO
create table Books
(Bookid int, Title varchar(100), Authorname varchar(100), state char(2))
go
insert into Books (Bookid, Title, Authorname, state)
values (1, 'The Third Eye','Lobsang Rampa','CA')
insert into Books (Bookid, Title, Authorname, state)
values (2, 'Service Oriented Architecture For Dummies', 'Judith Hurwitz','NJ')
insert into Books (Bookid, Title, Authorname, state)
values (3, 'Business Reference for Students and Professionals','Ray
Myers','NY')
insert into Books (Bookid, Title, Authorname, state)
values (4, 'More Java Gems','Dwight Deugo', 'FL')
insert into Books (Bookid, Title, Authorname, state)
values (5, 'Six Sigma Workbook For Dummies','Craig Gygi','FL')
insert into Books (Bookid, Title, Authorname, state)
values (6, 'Performance Appraisals: How to Achieve Top Results',
'Priscilla A. Glidden', 'NC' )
insert into Books (Bookid, Title, Authorname, state)
values (7, 'Talent Management: From Competencies to Organizational
Performance',
'John Smith','FL')
insert into Books (Bookid, Title, Authorname, state)
values (8, 'Using Unix','Howard Johnson','CT')
insert into Books (Bookid, Title, Authorname, state)
values (9, 'Mastering Oracle','Erina Zolotrova','CT')
insert into Books (Bookid, Title, Authorname, state)
values (10, 'How to become CEO','Olga Zohaskov','NY')
go
Để truy vấn tt cả các giá trị trong bảng ta sử dng hàm truy vn dưới:
Select * from Books
m y scho kết qu như hình dưới
Gi sử cng ta muốn hin thị toàn bsốch theo thứ tc bang: đầu tiên là
NY, sau đóCA, NJ, CT FL.
Bn có thể thực hiện được điu này bng cách s dụng hàm CASE như dưới
đây:
select Title, Authorname, state from Books order by case
when state ='NY' then 1
when state ='CA' then 2
when state ='NJ' then 3
when state ='CT' then 4
when state ='FL' then 5 else 6 end
m y scho kết qu như sau:
Title Authorname state
------------------------------------------------------------------ ----------------------- -----
Business Reference for Students and Professionals Ray Myers
NY
How to become CEO Olga Zohaskov
NY
The Third Eye Lobsang Rampa CA
Service Oriented Architecture For Dummies
Judith Hurwitz
NJ
Using Unix Howard Johnson CT
Mastering Oracle Erina Zolotrova CT
More Java Gems Dwight Deugo FL
Six Sigma Workbook For Dummies Craig Gygi
FL
Talent Management: From Competencies to Organizational Per John
Smith FL
Performance Appraisals: How to Achieve Top Results Priscilla A.
Glidden NC
Kết luận
Trong phn một và phn hai của loạt bài này, cng tôi đã hướng dẫn ch s
dụng các hàm CASE trong SQL Server. Trong phn tiếp theo, chúng ta s xem
xét cách s dụng hàm CASE trong mệnh đề GROUP BY
TH - HT