資源描述:
《sql中case語(yǔ)句用法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、SQL中Case語(yǔ)句用法討論?Case具有兩種格式。簡(jiǎn)單Case函數(shù)和Case搜索函數(shù)。--簡(jiǎn)單Case函數(shù)CASEsexWHEN'1'THEN'男'WHEN'2'THEN'女'ELSE'其他'END--Case搜索函數(shù)CASEWHENsex='1'THEN'男'WHENsex='2'THEN'女'ELSE'其他'END這兩種方式,可以實(shí)現(xiàn)相同的功能。簡(jiǎn)單Case函數(shù)的寫法相對(duì)比較簡(jiǎn)潔,但是和Case搜索函數(shù)相比,功能方面會(huì)有些限制,比如寫判斷式。還有一個(gè)需要注意的問題,Case函數(shù)只返回第一個(gè)符合條件的值,剩下的Case部分將
2、會(huì)被自動(dòng)忽略。--比如說(shuō),下面這段SQL,你永遠(yuǎn)無(wú)法得到“第二類”這個(gè)結(jié)果CASEWHENcol_1IN('a','b')THEN'第一類'WHENcol_1IN('a')THEN'第二類'ELSE'其他'END下面我們來(lái)看一下,使用Case函數(shù)都能做些什么事情。一,已知數(shù)據(jù)按照另外一種方式進(jìn)行分組,分析。有如下數(shù)據(jù):(為了看得更清楚,我并沒有使用國(guó)家代碼,而是直接用國(guó)家名作為PrimaryKey)國(guó)家(country)人口(population)中國(guó)600美國(guó)100加拿大100英國(guó)200法國(guó)300日本250德國(guó)200墨西哥50
3、印度250根據(jù)這個(gè)國(guó)家人口數(shù)據(jù),統(tǒng)計(jì)亞洲和北美洲的人口數(shù)量。應(yīng)該得到下面這個(gè)結(jié)果。洲人口亞洲1100北美洲250其他700想要解決這個(gè)問題,你會(huì)怎么做?生成一個(gè)帶有洲Code的View,是一個(gè)解決方法,但是這樣很難動(dòng)態(tài)的改變統(tǒng)計(jì)的方式。如果使用Case函數(shù),SQL代碼如下:SELECTSUM(population),CASEcountryWHEN'中國(guó)'THEN'亞洲'WHEN'印度'THEN'亞洲'WHEN'日本'THEN'亞洲'WHEN'美國(guó)'THEN'北美洲'WHEN'加拿大'THEN'北美洲'WHEN'墨西哥'THEN'
4、北美洲'ELSE'其他'ENDFROMTable_AGROUPBYCASEcountryWHEN'中國(guó)'THEN'亞洲'WHEN'印度'THEN'亞洲'WHEN'日本'THEN'亞洲'WHEN'美國(guó)'THEN'北美洲'WHEN'加拿大'THEN'北美洲'WHEN'墨西哥'THEN'北美洲'ELSE'其他'END;同樣的,我們也可以用這個(gè)方法來(lái)判斷工資的等級(jí),并統(tǒng)計(jì)每一等級(jí)的人數(shù)。SQL代碼如下;SELECTCASEWHENsalary<=500THEN'1'WHENsalary>500ANDsalary<=600THEN'2'W
5、HENsalary>600ANDsalary<=800THEN'3'WHENsalary>800ANDsalary<=1000THEN'4'ELSENULLENDsalary_class,COUNT(*)FROMTable_AGROUPBYCASEWHENsalary<=500THEN'1'WHENsalary>500ANDsalary<=600THEN'2'WHENsalary>600ANDsalary<=800THEN'3'WHENsalary>800ANDsalary<=1000THEN'4'ELSENULLEND;二,用
6、一個(gè)SQL語(yǔ)句完成不同條件的分組。有如下數(shù)據(jù)國(guó)家(country)性別(sex)人口(population)中國(guó)1340中國(guó)2260美國(guó)145美國(guó)255加拿大151加拿大249英國(guó)140英國(guó)260按照國(guó)家和性別進(jìn)行分組,得出結(jié)果如下國(guó)家男女中國(guó)340260美國(guó)4555加拿大5149英國(guó)4060普通情況下,用UNION也可以實(shí)現(xiàn)用一條語(yǔ)句進(jìn)行查詢。但是那樣增加消耗(兩個(gè)Select部分),而且SQL語(yǔ)句會(huì)比較長(zhǎng)。下面是一個(gè)是用Case函數(shù)來(lái)完成這個(gè)功能的例子SELECTcountry,SUM(CASEWHENsex='1'THEN
7、populationELSE0END),--男性人口SUM(CASEWHENsex='2'THENpopulationELSE0END)--女性人口FROMTable_AGROUPBYcountry;這樣我們使用Select,完成對(duì)二維表的輸出形式,充分顯示了Case函數(shù)的強(qiáng)大。三,在Check中使用Case函數(shù)。在Check中使用Case函數(shù)在很多情況下都是非常不錯(cuò)的解決方法??赡苡泻芏嗳烁揪筒挥肅heck,那么我建議你在看過下面的例子之后也嘗試一下在SQL中使用Check。下面我們來(lái)舉個(gè)例子公司A,這個(gè)公司有個(gè)規(guī)定,女職員
8、的工資必須高于1000塊。如果用Check和Case來(lái)表現(xiàn)的話,如下所示CONSTRAINTcheck_salaryCHECK(CASEWHENsex='2'THENCASEWHENsalary>1000THEN1ELSE0ENDELSE1END=1)如果單純使