文章出處

在數據庫中,對數據進行比對,有兩種用法,

第一種:不對任何列進行條件判斷

SELECT 
Student_ID  AS 學號,English AS 英語成績,
CASE 
WHEN English>=120 THEN '優秀'
WHEN English>=60 AND English<=100 THEN '及格'
WHEN English<60 THEN '不及格'
END AS 描述
FROM dbo.Score

執行的結果是:

學號 英語成績   描述
1 120 優秀
2 100 及格
3 55 不及格
4 59 不及格
5 60 及格

 

 

 

 

 

從Case開始判斷,判斷什么?不知道,當when開始的時候,才知道判斷什么東西,類似于C#中的if...esle if...else..

 

第二種:直接case列,值判斷  

SELECT 
CASE StudentID
WHEN 1 THEN '學號為1'
WHEN 2 THEN '學號為2'
WHEN 3 THEN '學號為3'
WHEN 4 THEN '學號為4'
END
FROM dbo.Student

執行的結果為:

(無列名)
學號為1
學號為2
學號為3
學號為4
NULL

看到最后一個是NULL,都不滿足Case條件的話,如果沒有Else語句,默認返回NULL值。

從Case開始,一開始就知道要判斷StudentID的值,如果是1,就輸出“學號為1”,后面依次類推。。。

相當于C#中的Switch(條件)case

SELECT 
CASE StudentID
WHEN 1 THEN '學號為1'
WHEN 2 THEN '學號為2'
WHEN 3 THEN '學號為3'
WHEN 4 THEN '學號為4'
ELSE '無名氏'
END
FROM dbo.Student

這個SQL,執行的結果是:

(無列名)
學號為1
學號為2
學號為3
學號為4
無名氏

 case 多個列的情況:

SELECT * FROM dbo.Test
SELECT DanHao,
CASE 
WHEN salary>0 THEN salary
ELSE 0 
END AS 收入,
CASE
WHEN salary<0 THEN ABS( salary) 
ELSE 0 
END AS 支出
FROM Test

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()