SQL Server Case表達(dá)式使用方式
SQL Server Case表達(dá)式
在SQL Server中,在處理?xiàng)l件分支時(shí),使用Case表達(dá)式十分便利,對于Case的表達(dá)基本用法很簡單,但它還有一些我們意想不到的寫法,可以為我們的SQL優(yōu)化,起到事半功倍的效果。
1.常用Select用法
例如:
在人物表中對于性別列,我們可以使用數(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è)字段需要面對多種情況時(shí),一般由對最底層的條件依次往上多次去更新,這樣很容易出現(xiàn)事故,使用Case 表達(dá)式可以一次更新。
例如:
針對一張分?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á)式
針對分?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)文章
SQL?Server數(shù)據(jù)庫備份和恢復(fù)數(shù)據(jù)庫的全過程
最近在功能調(diào)試前需要先將測試數(shù)據(jù)庫備份,然后功能調(diào)試之后再將測試數(shù)據(jù)庫還原,這樣就可以重復(fù)的進(jìn)行功能調(diào)試,這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫備份和恢復(fù)數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2022-06-06教你恢復(fù)SQLSERVER的master系統(tǒng)庫的方法
這篇文章主要介紹了恢復(fù)SQLSERVER的master系統(tǒng)庫,本文介紹可能需要恢復(fù)master數(shù)據(jù)庫的情況以及如何正確完成這些步驟,需要的朋友可以參考下2022-09-09SQL Server數(shù)據(jù)表字段自定義自增數(shù)據(jù)格式的方法
這篇文章主要介紹了SQL Server數(shù)據(jù)表字段自定義自增數(shù)據(jù)格式的方法,結(jié)合實(shí)例形式分析了SQL Server自增數(shù)據(jù)格式的定義方法與具體實(shí)現(xiàn)步驟,需要的朋友可以參考下2016-08-08SQL Server數(shù)字開頭的數(shù)據(jù)庫表名的解決方法
這篇文章主要介紹了SQL Server數(shù)字開頭的數(shù)據(jù)庫表名的解決方法,需要的朋友可以參考下2015-11-11SQLServer 附加數(shù)據(jù)庫后出現(xiàn)只讀或失敗的解決方法
如果你在附加SQL數(shù)據(jù)庫,出現(xiàn)只讀或失敗的情況,來看下本文的解決方案吧。2010-03-03