CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他'
END
CASE
WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他'
END
SELECT grade,
COUNT(CASE WHEN sex = 1 THEN 1 END) AS 男生數,
COUNT(CASE WHEN sex = 2 THEN 1 END) AS 女生數
FROM students
GROUP BY grade;
利用 COUNT 忽略 NULL 特性,實現單次掃描多條件統計。
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;
將多組 AND/OR 邏輯封裝為單一條件判斷,提升可讀性。
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 AS 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;
注意:GROUP BY 必須與 SELECT 中的 CASE 表達式完全一致,不可使用別名。
SELECT * FROM employees
ORDER BY
CASE department_id
WHEN 10 THEN 1
WHEN 20 THEN 2
WHEN 30 THEN 3
ELSE 4
END;
SELECT DECODE(sex, 'M', 'Male', 'F', 'Female', 'Unknown') FROM employees;
不支援 ANSI SQL,語法不如 CASE 直觀,不建議新專案使用。
WHERE (T2.COMPARE_TYPE = 'A' AND T1.SOME_TYPE LIKE 'NOTHING%')
OR (T2.COMPARE_TYPE != 'A' AND T1.SOME_TYPE NOT LIKE 'NOTHING%')
適用於簡單邏輯,複雜條件下易出錯,需謹慎驗證邏輯等價性。
ELSE NULL 可省略,但建議顯式寫出以示意圖