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

上一篇 / 下一篇  2008-11-22 16:44:59 / 个人分类:Oracle

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP

使用 IF...ELSE 的缺點就是當條件一多時,程式碼看去就不容易懂,維護起來也不方便。所以 SQL Server 特別提供了另外一個簡單的指令:CASE...WHEN。51Testing软件测试网(?7D x*wZ(r b}

4Em#v;u5~(vE0這個範例是將代表性別與婚姻代碼的欄位,轉換成大家看的懂得文字描述:51Testing软件测试网%rP(A6j2g#u{

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

&L @iUYfj|0
L|:`6P;o5Fh0執行的部分結果如下:51Testing软件测试网5pJ7y_|p

'\JC5I2G~D V&W!?051Testing软件测试网&Zb2k9x| _+P&xsn
上面的那段程式碼可以改寫成下面這樣:51Testing软件测试网M#g.b?:l8CAQ
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

YlY1SxD?%J051Testing软件测试网[No o8h5u
上面這兩個程式碼的差別在於第一個是使用了兩個 WHEN 子句,而第二個則是使用一個 WHEN 子句與一個 ELSE 子句。51Testing软件测试网'u F _Hy,B#M i,f/X ?6J
51Testing软件测试网c0k,ao2{n @+`)q
現在我們使用 CASE 函式的另外一種寫法來改寫上面的兩個程式碼:51Testing软件测试网2y6@'g0}$yE-z
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
51Testing软件测试网9~0c1k;Ii2vk
51Testing软件测试网b\1T&p cu^
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
51Testing软件测试网3AbWFK6[
51Testing软件测试网5I;[x+l1|8G P$K|
由於執行的結果也是一樣,就不再貼圖了。只是大家看得出來這四個程式碼之間的差異嗎?
6N5s T;Wf.Y0
v]ZX3f0前兩個程式碼是在 CASE 函數之後,用欄位名稱當作條件,然後再檢查欄位中的資料的值。而倒數第兩個程式碼則是檢查 WHEN 子句的條件是否成立,最後一個程式碼則是先檢查 WHEN 子句有沒有成立,如果沒有成立就傳回 ELSE 子句的結果。
[+Dg3Ig\7`0
Uv g6t/hx:I P3P6M2t0就 SQL Server 2005 線上叢書的說法,前兩個程式碼是所謂的「簡單的 CASE 功能」,它會將運算式與一組簡單的運算式比對,以判斷其結果。而最後兩個程式碼是所謂的「搜尋的 CASE 功能」,它會評估一組布林運算式來判斷其結果。相信大家有看,也是沒有懂啦!
)KXN x*aNrk;yE0
1aFn|t/p0不過在看過這四個程式碼,再加上下面那張比較圖,自己比較看看,相信聰明的邦友,都很厲害、看的懂。51Testing软件测试网hNKX%wi R7Fk

2LeZg2}*fo4q0
kd'Y8Z[&MGz0
5q$so ~Ge]0由圖中,我們可以看出來左邊那個會針對 Gender 與 MaritalStatus 進行「單一值的比較」,而右邊那個則是進行「多種條件的判斷」。

TAG: Oracle

 

评分:0

我来说两句

Open Toolbar