簡單CASE運算式,使用運算式確定傳回值.
文法:
| 代碼如下 |
複製代碼 |
CASE search_expression WHEN expression1 THEN result1 WHEN expression2 THEN result2 ... WHEN expressionN THEN resultN ELSE default_result |
搜尋CASE運算式,使用條件確定傳回值.
文法:
| 代碼如下 |
複製代碼 |
CASE WHEN condition1 THEN result1 WHEN condistion2 THEN result2 ... WHEN condistionN THEN resultN ELSE default_result END |
1. CASE WHEN 運算式有兩種形式
--簡單Case函數
| 代碼如下 |
複製代碼 |
CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜尋函數
CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END |
2. CASE WHEN 在語句中不同位置的用法
2.1 SELECT CASE WHEN 用法
select 與 case結合使用最大的好處有兩點,一是在顯示查詢結果時可以靈活的組織格式,二是有效避免了多次對同一個表或幾個表的訪問。下面舉個簡單的例子來說明。例如表 students(id, name ,birthday, sex, grade),要求按每個年級統計男生和女生的數量各是多少,統計結果的表頭為,年級,男生數量,女生數量。如果不用select case when,為了將男女數量並列顯示,統計起來非常麻煩,先確定年級資訊,再根據年級取男生數和女生數,而且很容易出錯
| 代碼如下 |
複製代碼 |
SELECT grade, COUNT (CASE WHEN sex = 1 THEN 1 /*sex 1為男生,2位女生*/ ELSE NULL END) 男生數, COUNT (CASE WHEN sex = 2 THEN 1 ELSE NULL END) 女生數 FROM students GROUP BY grade;
|
2.3 WHERE CASE WHEN 用法
| 代碼如下 |
複製代碼 |
SELECT T2.*, T1.* FROM T1, T2 WHERE (CASE WHEN T2.COMPARE_TYPE = 'A' AND T1.SOME_TYPE LIKE 'NOTHING%' THEN 1 WHEN T2.COMPARE_TYPE != 'A' AND T1.SOME_TYPE NOT LIKE 'NOTHING%' THEN 1 ELSE 0 END) = 1
|
2.4 GROUP BY CASE WHEN 用法
| 代碼如下 |
複製代碼 |
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;
|