iT邦幫忙

DAY 13
7

T-SQL 應用之美系列 第 13

使用流程控制:CASE...WHEN

不管哪一種語言都具備流程控制的功能,用來控制程式執行與流程的流向,透過流程控制可以讓程式更容易維護。
這次要討論根據特定條件來執行不同流程的指令:CASE...WHEN,它可說是 IF...ELSE 的改良版。
使用 IF...ELSE 的缺點就是當條件一多時,程式碼看去就不容易懂,維護起來也不方便。所以 SQL Server 特別提供了另外一個簡單的指令:CASE...WHEN。

這個範例是將代表性別與婚姻代碼的欄位,轉換成大家看的懂得文字描述:

USE AdventureWorks
GO

SELECT 員工編號 = EmployeeID,
	性別 = CASE Gender
			WHEN 'M' THEN N'男'
			WHEN 'F' THEN N'女'
		END,
	婚姻 = CASE MaritalStatus
			WHEN 'S' THEN N'單身'
			WHEN 'M' THEN N'已婚'
		END
FROM HumanResources.Employee

執行的部分結果如下:

上面的那段程式碼可以改寫成下面這樣:

USE AdventureWorks
GO

SELECT 員工編號 = EmployeeID,
	性別 = CASE Gender
			WHEN 'M' THEN N'男'
			ELSE N'女'
		END,
	婚姻 = CASE MaritalStatus
			WHEN 'S' THEN N'單身'
			ELSE N'已婚'
		END
FROM HumanResources.Employee

上面這兩個程式碼的差別在於第一個是使用了兩個 WHEN 子句,而第二個則是使用一個 WHEN 子句與一個 ELSE 子句。

現在我們使用 CASE 函式的另外一種寫法來改寫上面的兩個程式碼:

USE AdventureWorks
GO

SELECT 員工編號 = EmployeeID,
	性別 = CASE
			WHEN (Gender = 'M') THEN N'男'
			WHEN (Gender = 'F') THEN N'女'
		END,
	婚姻 = CASE 
			WHEN (MaritalStatus = 'S') THEN N'單身'
			WHEN (MaritalStatus = 'M') THEN N'已婚'
		END
FROM HumanResources.Employee






USE AdventureWorks
GO

SELECT 員工編號 = EmployeeID,
	性別 = CASE
			WHEN (Gender = 'M') THEN N'男'
			ELSE N'女'
		END,
	婚姻 = CASE 
			WHEN (MaritalStatus = 'S') THEN N'單身'
			ELSE N'已婚'
		END
FROM HumanResources.Employee

由於執行的結果也是一樣,就不再貼圖了。只是大家看得出來這四個程式碼之間的差異嗎?

前兩個程式碼是在 CASE 函數之後,用欄位名稱當作條件,然後再檢查欄位中的資料的值。而倒數第兩個程式碼則是檢查 WHEN 子句的條件是否成立,最後一個程式碼則是先檢查 WHEN 子句有沒有成立,如果沒有成立就傳回 ELSE 子句的結果。

就 SQL Server 2005 線上叢書的說法,前兩個程式碼是所謂的**「簡單的 CASE 功能」,它會將運算式與一組簡單的運算式比對,以判斷其結果。而最後兩個程式碼是所謂的「搜尋的 CASE 功能」**,它會評估一組布林運算式來判斷其結果。相信大家有看,也是沒有懂啦!

不過在看過這四個程式碼,再加上下面那張比較圖,自己比較看看,相信聰明的邦友,都很厲害、看的懂。

由圖中,我們可以看出來左邊那個會針對 Gender 與 MaritalStatus 進行「單一值的比較」,而右邊那個則是進行「多種條件的判斷」。


上一篇
使用流程控制:IF...ELSE
下一篇
使用流程控制:GOTO
系列文
T-SQL 應用之美30
0
魯大
iT邦高手 1 級 ‧ 2008-09-13 08:41:34

最近剛好在學這個
又學到一招了
感謝你的分享...

0
huangsb
iT邦好手 1 級 ‧ 2008-09-14 10:50:15

請問一下,上面那一張圖做的不錯,不知道是用什麼軟體製作的?

alexc iT邦高手 1 級 ‧ 2008-09-14 11:36:33 檢舉

用 PowerPoint 2007,然後再使用另存新檔的方式,把某一張簡報存成圖檔

0
goodjoy1003
iT邦新手 4 級 ‧ 2008-09-15 10:53:43

這真的是太神奇了,原來SQL script可以這樣用啊...

0
鐵殼心
iT邦高手 1 級 ‧ 2008-09-17 09:19:13

用PowerPoint做圖檔, 這招趕快學起來.

我要留言

立即登入留言