Cấp bậc tác giả:

DATABASE

Hàm CASE trong SQL Server 2005 (Phần 2)

Được viết bởi QuangIT ngày 13/08/2012 lúc 07:43 PM
Trong phần 1 của loạt bài này chúng tôi đã giải 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ử dụng hàm CASE trong một số trường hợp khác.
  • 0
  • 9746

Hàm CASE trong SQL Server 2005 (Phần 2)

Trong phần 1 của loạt bài này chúng tôi đã giải 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ử dụng hàm CASE trong một số trường hợp khác.

Phương thức 4: Sử dụng hàm CASE trong tìm kiếm 

Giả sử chúng ta có 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
Và giờ muố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
Hàm này sẽ cho 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 thức 5: Sử dụng hàm CASE trong mệnh đề ORDER BY 

Giả sử chúng ta có 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 ','Judith Hurwitz','NJ')
insert into Books (Bookid, Title, Authorname, state)
values (3, 'Business Reference for Students and','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 ','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 ',
'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 tất cả các giá trị trong bảng ta sử dụng hàm truy vấn dưới:
Select * from Books
Hàm này sẽ cho kết quả như hình dưới
Giả sử chúng ta muốn hiển thị toàn bộ số sách theo thứ tự các bang: đầu tiên là NY
sau đó là CA, NJ, CT và FL. 

Bạn có thể thực hiện được điều này bằng 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
Hàm này sẽ cho kết quả như sau:
Hàm này sẽ cho kết quả như sau:
Title                                   Authorname               state
-------------------------------------- -----------------------  -----
Business Reference for Students and     Ray Myers               NY
How to become CEO                       Olga Zohaskov           NY
The Third Eye                           Lobsang Rampa           CA
Service Oriented Architecture For       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 Competenci      Per John Smith          FL
Performance Appraisals: How to Achieve  Priscilla A. Glidden    NC
Kết luận 

Trong phần một và phần hai của loạt bài này, chúng tôi đã hướng dẫn cách sử dụng các hàm CASE trong SQL Server. Trong phần tiếp theo, chúng ta sẽ xem xét cách sử dụng hàm CASE trong mệnh đề GROUP BY

Nguồn bài viết: QuanTriMang

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML