case?when?then?else?end語句的用法(附demo)
case具有兩種格式。簡單case函數(shù)和case搜索函數(shù)。
- case :表示需要處理的字段
- when :表示條件
- then :表示當(dāng)when執(zhí)行為true時,再執(zhí)行的語句
- else :表示當(dāng)所有的when執(zhí)行為false時,再執(zhí)行的語句
- end:表示 case 語句結(jié)束的結(jié)尾
--簡單case函數(shù)
case sex when '1' then '男' when '2' then '女' else '其他' end
--case搜索函數(shù)--經(jīng)常用的是這個
case when sex = '1' then '男' when sex = '2' then '女' else '其他' end
這兩種方式,可以實現(xiàn)相同的功能。簡單case函數(shù)的寫法相對比較簡潔,但是和case搜索函數(shù)相比,功能方面會有些限制,比如寫判定式。
還有一個需要注重的問題,case函數(shù)只返回第一個符合條件的值,剩下的case部分將會被自動忽略。
--比如說,下面這段sql,你永遠無法得到“第二類”這個結(jié)果
case when col_1 in ( 'a', 'b') then'第一類'
when col_1 in ('a') then '第二類'
else '其他' end這是原始表:

例子一:看下select函數(shù)加case函數(shù)和不加case函數(shù)的區(qū)別
不加case函數(shù)的,SELECT id,name,core,sex FROM student a ;

加case函數(shù)的,SELECT (CASE WHEN a.`name`='張三' THEN a.core ELSE 0 END) AS '張三' , id,name,core,sex FROM student a ;

可以看到,加了case函數(shù)的就是自己單獨成一列,就是比不加多了一列數(shù)據(jù),它并不會改變行的數(shù)量.
例子二: 介紹下case函數(shù)的執(zhí)行過程.
SELECT (CASE WHEN a.`name`='張三' THEN a.core ELSE 0 END) AS '張三' FROM student a ;
上面的執(zhí)行過程:
進行匹配的是名字name,首先匹配第一行,name是等于張三,所以返回core也就是50
匹配第二行,name等于李四,不匹配,返回else的值也就是0
匹配第三行,name等于王五,不匹配,返回else的值也就是0
匹配第四行,name等于趙六,不匹配,返回else的值也就是0
所以得到結(jié)果:

例子三: 看下case函數(shù)后面加不加as的區(qū)別
先看下加as, SELECT (CASE WHEN a.`name`='張三' THEN a.core ELSE 0 END) AS '張三' FROM student a ;

然后是不加as, SELECT (CASE WHEN a.`name`='張三' THEN a.core ELSE 0 END) FROM student a ;

可以看到, 加as就是對生成的列取個別名, 不加as的話默認的列名就是 case這整個標(biāo)簽.
例子四:一列里面多次條件匹配
SELECT (CASE WHEN a.`name`='張三' THEN a.core WHEN a.`name`='李四' THEN a.core END) AS '張三' FROM student a ;

執(zhí)行過程:第一行匹配張三成功,返回50,第二行匹配李四成功返回60,三四兩行不匹配返回null
例子五:多列的單條件匹配
SELECT (CASE WHEN a.`name`='張三' THEN a.core END) AS '張三',(CASE WHEN a.`name`='李四' THEN a.core END) AS '李四' FROM student a;

總結(jié)case語句能將行轉(zhuǎn)換成列
例子六:實戰(zhàn)一
有如下數(shù)據(jù):

根據(jù)這個國家人口數(shù)據(jù),統(tǒng)計亞洲和北美洲的人口數(shù)量。得到下面這個結(jié)果:

查詢sql:
select sum(population),
case country
when '中國' then'亞洲'
when '印度' then'亞洲'
when '日本' then'亞洲'
when '美國' then'北美洲'
when '加拿大' then'北美洲'
when '墨西哥' then'北美洲'
else '其他' end
from table_a
group by case country
when '中國' then'亞洲'
when '印度' then'亞洲'
when '日本' then'亞洲'
when '美國' then'北美洲'
when '加拿大' then'北美洲'
when '墨西哥' then'北美洲'
else '其他' end;例子七:實戰(zhàn)二
有如下數(shù)據(jù):

按照國家和性別進行分組,得出結(jié)果如下:

查詢sql:
select country,
sum( case when sex = '1' then
population else 0 end), --男性人口
sum( case when sex = '2' then
population else 0 end) --女性人口
from table_a
group by country;到此這篇關(guān)于case when then else end語句的用法(附demo)的文章就介紹到這了,更多相關(guān)case when then else end內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
完美解決MSSQL"以前的某個程序安裝已在安裝計算機上創(chuàng)建掛起的文件操作"
以前裝過sql server,后來刪掉?,F(xiàn)在重裝,卻出現(xiàn)“以前的某個程序安裝已在安裝計算機上創(chuàng)建掛起的文件操作。運行安裝程序之前必須重新啟動計算機”錯誤。無法進行下去。 現(xiàn)在又遇到了,終于完全搞定.2008-11-11
SQL server數(shù)據(jù)庫創(chuàng)建代碼 filegroup文件組修改的示例代碼
這篇文章主要介紹了SQL server數(shù)據(jù)庫創(chuàng)建代碼 filegroup文件組修改的實現(xiàn)方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08
關(guān)于 SQL Server ErrorLog 錯誤日志說明
關(guān)于 SQL Server ErrorLog 錯誤日志說明學(xué)習(xí)sqlserver的朋友可以參考下。2011-04-04

