許多情況下需要將資料庫的資料,逐筆依照所屬條件式進行資料類型的轉換或
是執行對應的陳述式
這樣的需求之下可以使用 CASE 的陳述式進行作業。該作業可以在合集基礎
(Set-based) 的指令下,
處理 Row-based 的作業功能。以下的範例就是利用 CASE 的方式,將輸出的資
料內容進行轉換,
Use AdventureWorks
SELECT EmployeeID,Gender,
CASE Gender WHEN 'M' THEN 'Man' --將 M 轉換成男生
WHEN 'F' THEN 'Woman' --將 F 轉換成女生
ELSE 'Unknown' --其他者顯示為 Unknown
END --對應 CASE 結束
FROM HumanResources.Employee
GO
--結果
圖 2-3-6A 使用 CASE 陳述式轉換資料內容
進階的 CASE 運用可以搭配建立資料表的過程,產生計算性資料行,資料表中
計算資料行的資料值,都是由同一個資料表的其他資料行所決定。譬如薪資級距
0~29999 為 A 級,30000~59999 是 B 級,60000~99999 是 C 級,其他為 D 級。這
樣的級距資料是由薪資資料行所決定時,稱為計算資料行。以下就是此範例的展
示。
2
--展示 CASE 搭配運算式使用
CREATE TABLE EmpSalary --建立資料表的陳述式
( empID int not null primary key, --員工編號
empName varchar(30) not null, --員工姓名
Salary INT not null , --員工薪資
Grade AS CASE Salary / 30000 --利用 CASE 與運算式判斷
WHEN 0 THEN 'A'
WHEN 1 THEN 'B'
WHEN 2 THEN 'C'
ELSE 'D'
END
)
GO
整個 CASE 語法的說明如下。
--簡易型的 CASE 語法
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
--運算式功能的 CASE 語法
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END