sqlserver Case函數運用引見。本站提示廣大學習愛好者:(sqlserver Case函數運用引見)文章只能為提供參考,不一定能成為您想要的結果。以下是sqlserver Case函數運用引見正文
--簡略Case函數
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜刮函數
CASE WHEN sex = '1' THEN '男'
WHEN sex = '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)
國度(country) 生齒(population)
中國 600
美國 100
加拿年夜 100
英國 200
法國 300
日本 250
德國 200
墨西哥 50
印度 250
依據這個國度生齒數據,統計亞洲和北美洲的生齒數目。應當獲得上面這個成果。
洲 生齒
亞洲 1100
北美洲 250
其他 700
想要處理這個成績,你會怎樣做?生成一個帶有洲Code的View,是一個處理辦法,然則如許很難靜態的轉變統計的方法。
假如應用Case函數,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;
異樣的,我們也能夠用這個辦法來斷定工資的品級,並統計每品級的人數。SQL代碼以下;
SELECT
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END salary_class,
COUNT(*)
FROM Table_A
GROUP BY
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END;
二,用一個SQL語句完成分歧前提的分組。
有以下數據
國度(country) 性別(sex) 生齒(population)
中國 1 340
中國 2 260
美國 1 45
美國 2 55
加拿年夜 1 51
加拿年夜 2 49
英國 1 40
英國 2 60
依照國度和性別停止分組,得出成果以下
國度 男 女
中國 340 260
美國 45 55
加拿年夜 51 49
英國 40 60
通俗情形下,用UNION也能夠完成用一條語句停止查詢。然則那樣增長消費(兩個Select部門),並且SQL語句會比擬長。
上面是一個是用Case函數來完成這個功效的例子
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;
如許我們應用Select,完成對二維表的輸入情勢,充足顯示了Case函數的壯大。
三,在Check中應用Case函數。
在Check中應用Case函數在許多情形下都長短常不錯的處理辦法。能夠有許多人基本就不消Check,那末我建議你在看過上面的例子以後也測驗考試一下在SQL中應用Check。
上面我們來舉個例子
公司A,這個公司有個劃定,女人員的工資必需高於1000塊。假如用Check和Case來表示的話,以下所示
CONSTRAINT check_salary CHECK
( CASE WHEN sex = '2'
THEN CASE WHEN salary > 1000
THEN 1 ELSE 0 END
ELSE 1 END = 1 )
假如純真應用Check,以下所示
CONSTRAINT check_salary CHECK
( sex = '2' AND salary > 1000 )
女人員的前提卻是相符了,男人員就沒法輸出了。