CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE result_else
END
USE pubs
SELECT
title,
'Price Range' = CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 AND 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END
FROM titles
ORDER BY price
SELECT 'Number of Titles', COUNT(*)
FROM titles
GROUP BY CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 AND 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END
SELECT
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 AND 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS Range,
title
FROM titles
GROUP BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 AND 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
title
ORDER BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 AND 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
title
關鍵規則:GROUP BY 區塊必須重複 SELECT 區塊的 CASE 運算式 (或使用序數/別名,視版本而定)。
-- 找出「高價禮品類」書籍
SELECT title, price
FROM titles
WHERE CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 AND 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END = 'Gift to impress relatives'
SELECT
title,
price,
'Category' = CASE
WHEN type = 'business' THEN
CASE WHEN price > 20 THEN 'Premium Business' ELSE 'Standard Business' END
WHEN type = 'psychology' THEN 'Psychology'
ELSE 'Other'
END
FROM titles
CASE 不只是「建立衍生欄位」的工具,更是**在查詢各階段注入條件邏輯**的通用機制。善用它可減少中繼暫存表、簡化應用程式端邏輯、實現動態分組與排序。