文章出處
文章列表
在數據庫中,對數據進行比對,有兩種用法,
第一種:不對任何列進行條件判斷
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
文章列表
全站熱搜