SQL Case when 的使用方法

2021-09-09 01:33:14 字數 3494 閱讀 2687

感謝:

case具有兩種格式。簡單case函式和case搜尋函式。

--簡單case函式
case

***when'1

'then'男

'when'2

'then'女

'else'其他

'end

--case搜尋函式
case

when *** ='1

'then'男

'when *** ='2

'then'女

'else'其他

'end

這兩種方式,可以實現相同的功能。簡單case函式的寫法相對比較簡潔,但是和case搜尋函式相比,功能方面會有些限制,比如寫判斷式。還有乙個需要注意的問題,case函式只返回第乙個符合條件的值,剩下的case部分將會被自動忽略。 

--比如說,下面這段sql,你永遠無法得到「第二類」這個結果
case

when col_1 in ( '

a', '

b') then

'第一類

'when col_1 in ('

a') then

'第二類

'else'其他

'end

下面我們來看一下,使用case函式都能做些什麼事情。 

一,已知資料按照另外一種方式進行分組,分析。

有如下資料:(為了看得更清楚,我並沒有使用國家**,而是直接用國家名作為primary key) 

根據這個國家人口資料,統計亞洲和北美洲的人口數量。應該得到下面這個結果。 

想要解決這個問題,你會怎麼做?生成乙個帶有洲code的view,是乙個解決方法,但是這樣很難動態的改變統計的方式。 

如果使用case函式,sql**如下:

select

case

country

when'中國

'then'亞洲

'when'印度

'then'亞洲

'when'日本

'then'亞洲

'when'美國

'then

'北美洲

'when

'加拿大

'then

'北美洲

'when

'墨西哥

'then

'北美洲

'else'其他

'end

洲,sum

(population) 人口

from

table_a

group

bycase

country

when'中國

'then'亞洲

'when'印度

'then'亞洲

'when'日本

'then'亞洲

'when'美國

'then

'北美洲

'when

'加拿大

'then

'北美洲

'when

'墨西哥

'then

'北美洲

'else'其他

'end;

分析:這裡說明一下以上的sql是怎樣分組計算人口的,截圖說話:

以上的case函式將返回三組結果,在生成的虛擬表中將會以此計算各組的人口,即:sum(population)

同樣的,我們也可以用這個方法來判斷工資的等級,並統計每一等級的人數。sql**如下:

select

case

when salary<=

500then'1

'when salary>

500and salary<=

600then'2

'when salary>

600and salary<=

800then'3

'when salary>

800and salary<=

1000

then'4

'else

null

end工資類別,

count(*

) 人數

from

table_b

group

bycase

when salary<=

500then'1

'when salary>

500and salary<=

600then'2

'when salary>

600and salary<=

800then'3

'when salary>

800and salary<=

1000

then'4

'else

null

end;

結果:

二,用乙個sql語句完成不同條件的分組。

有如下資料 

按照國家和性別進行分組,得出結果如下 

普通情況下,用union也可以實現用一條語句進行查詢。但是那樣增加消耗(兩個select部分),而且sql語句會比較長。 

下面是乙個是用case函式來完成這個功能的例子 (注意:下面的sql與「按洲統計人口」的sql在分組上的區別:這裡是按表中的某一列進行分組,而那個是按case..when返回的結果進行分組。)

select

country,

sum(case *** when

1then population else

null

end) 男,

sum(case *** when

2then population else

null

end) 女

from

table_c

group

by country

這樣我們使用select,完成對二維表的輸出形式,充分顯示了case函式的強大。

SQL Case when 的使用方法

摘自 case具有兩種格式。簡單case函式和case搜尋函式。簡單case函式 case when 1 then 男 when 2 then 女 else 其他 end case搜尋函式 case when 1 then 男 when 2 then 女 else 其他 end 這兩種方式,可以實現...

SQL Case when 的使用方法

case具有兩種格式。簡單case函式和case搜尋函式。簡單case函式 case when 1 then 男 when 2 then 女 else 其他 end case搜尋函式 case when 1 then 男 when 2 then 女 else 其他 end 這兩種方式,可以實現相同的...

SQL Case when 的使用方法

merge關鍵字是乙個神奇的dml關鍵字。它在sql server 2008被引入,它能將insert,update,delete簡單的並為一句。msdn對於merge的解釋非常的短小精悍 根據與源表聯接的結果,對目標表執行插入 更新或刪除操作。例如,根據在另乙個表中找到的差異在乙個表中插入 更新或...