程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> sqlserver Case函數運用引見

sqlserver Case函數運用引見

編輯:MSSQL

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 )

女人員的前提卻是相符了,男人員就沒法輸出了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved