case when then else end 用法


前段時間做項目過程中制作報表時編寫的sql需要用到的case when then else end,因此將case的用法總結一下吧。

CASE命令有兩種語句格式:
語法形式1:CASE expression
            WHEN expression_11 THEN expression_12
             …
            WHEN expression_n1 THEN expression_n2
            [ELSE expression_m]
            END
該語句的執行過程是:將CASE后面表達式的值與各WHEN子句中的表達式的值進行比較,如果兩者相等,則返回THEN后的表達式的值,然后跳出CASE語句,否則返回ELSE子句中的表達式的值。ELSE子句是可選項。當CASE語句中不包含ELSE子句時,如果所有比較失敗時,CASE語句將返回NULL。
【例】從數據表stud_info中,選取stud_id、grade,如果grade為“男”則輸出“M”,如果為“女”輸出“F”。
SELECT stud_id, sex=CASE gender
                      WHEN ’男’ THEN ’M’
                      WHEN ’女’ THEN ’F’
                    END
FROM stud_info


語法形式2:CASE WHEN condition_expression_1 THEN expression_1
              …
             WHEN condition_expression_n THEN expression_n
             [ELSE expression_m]
           END
該語句的執行過程是:首先測試WHEN后的條件表達式的值,如果其值為真,則返回THEN后面的表達式的值,否則測試下一個WHEN子句中的表達式的值,如果所有WHEN子句后的表達式的值都為假,則返回ELSE后的表達式的值,如果在CASE語句中沒有ELSE子句,則CASE表達式返回NULL。
注意:CASE命令可以嵌套到SQL語句中。

【例】從stud_grade表中查詢所有同學考試成績情況,凡成績為空者輸出“未考”、小於60分輸出“不及格”、60分至70分輸出“及格”、70分至90分輸出“良好”、大於或等於90分時輸出“優秀”。
SELECT stud_id,name,score=CASE WHEN grade IS NULL THEN ’未考’
                              WHEN grade<60 THEN ’不及格’
                              WHEN grade>=60 AND grade<70 THEN ’及格’
                              WHEN grade>=70 AND grade<90 THEN ’良好’
                              WHEN grade>=90 THEN ’優秀’
                         END
FROM stud_grade


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM