最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL Server Case表達(dá)式使用方式

 更新時(shí)間:2024年12月25日 08:41:09   作者:-小龍人  
在SQL Server中,Case表達(dá)式可以用于條件分支,包括在Select、Update和GroupBy中使用,可以優(yōu)化SQL語句,提高效率

SQL Server Case表達(dá)式

在SQL Server中,在處理?xiàng)l件分支時(shí),使用Case表達(dá)式十分便利,對(duì)于Case的表達(dá)基本用法很簡單,但它還有一些我們意想不到的寫法,可以為我們的SQL優(yōu)化,起到事半功倍的效果。 

1.常用Select用法 

例如:

在人物表中對(duì)于性別列,我們可以使用數(shù)字1表示男,2表示女,0表示其他,在搜索表示數(shù)據(jù)時(shí),使用Case表達(dá)式如下:

--簡單Case表達(dá)式寫法
SELECT Id,
	Name,
	Age,
	CASE SEX 
		WHEN '1' THEN '男'
		WHEN '2' THEN '女'
		ELSE '未知' 
	END AS 性別
 FROM dbo.Person

--搜索Case表達(dá)式
SELECT Id,
	Name,
	Age,
	CASE  
		WHEN SEX= '1' THEN '男'
		WHEN SEX= '2' THEN '女'
		ELSE '未知' 
	END AS 性別
FROM dbo.Person

這里的兩種寫法,簡單表達(dá)式和搜索表達(dá)式效果是一樣的,可以根據(jù)自己喜好寫。 

注意事項(xiàng):

當(dāng)Case表達(dá)式執(zhí)行時(shí),匹配到第一個(gè)when時(shí),執(zhí)行就結(jié)束了,后面的when條件不會(huì)再去匹配,所以要注意條件范圍大小的順序。盡量寫else條件,否則顯示的數(shù)據(jù)可能是你意料之外的。

2.Update中使用Case表達(dá)式

當(dāng)需要更新某個(gè)字段需要面對(duì)多種情況時(shí),一般由對(duì)最底層的條件依次往上多次去更新,這樣很容易出現(xiàn)事故,使用Case 表達(dá)式可以一次更新。 

例如:

針對(duì)一張分?jǐn)?shù)表,分?jǐn)?shù)在 [60-70) 內(nèi)分?jǐn)?shù) * 0.6,分?jǐn)?shù)在 [70-80) 內(nèi)分?jǐn)?shù) * 0.7,分?jǐn)?shù)在 [80-90) 內(nèi)分?jǐn)?shù) * 0.8,分?jǐn)?shù)在 [90-100] 內(nèi)分?jǐn)?shù) * 0.9。

分?jǐn)?shù)表如下:

如果按條件一步步去更新,這里一定不能先去更新[90-100]分?jǐn)?shù)段的成績,因?yàn)檫@個(gè)分?jǐn)?shù)段的成績更新后成績在[81-90]范圍內(nèi),會(huì)被后面的更新再次更新,所以只能從最底層條件[60-70)條件往上依次多次去更新。

如果使用Case表達(dá)式可以一次更新所有情況

Update Score 
  Set Score= 
  		Case When Score>=90 And Score<=90 Then Score*0.9
		   	 When Score>=80 And Score<90 Then Score*0.8
		     When Score>=70 And Score<80 Then Score*0.7
		     When Score>=60 And Score<70 Then Score*0.6
			Else Score
  		END

3.Group By 聚合函數(shù)中使用Case表達(dá)式

針對(duì)分?jǐn)?shù)表統(tǒng)計(jì)出學(xué)生各學(xué)科成績,

如下表:PersonId為學(xué)號(hào),Subject:1為語文,2為數(shù)學(xué),3為英語。

 SELECT PersonId,
		SUM(CASE WHEN Subject=1 THEN Score ELSE 0 END) AS '語文',
		SUM(CASE WHEN Subject=2 THEN Score ELSE 0 END) AS '數(shù)學(xué)',
		SUM(CASE WHEN Subject=3 THEN Score ELSE 0 END) AS '英語'
	From Score
 Group By PersonId

實(shí)現(xiàn)結(jié)果:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

大渡口区| 日土县| 吴堡县| 昆明市| 卫辉市| 平邑县| 桃园县| 宁南县| 甘谷县| 兴仁县| 寻甸| 黄浦区| 康平县| 怀集县| 阳春市| 同心县| 望谟县| 同江市| 灵丘县| 罗源县| 兰坪| 长宁区| 山丹县| 永宁县| 大连市| 大姚县| 宁乡县| 塔河县| 高碑店市| 兴文县| 遂平县| 嘉黎县| 马公市| 肃宁县| 牙克石市| 连云港市| 泰来县| 都匀市| 南木林县| 罗定市| 中方县|