Windows NT 4.0 + Oracle 8.0.4
DECODE(expr, search1, result1, search2, result2, ..., default)
依序比對 expr 與 searchN,相等則回傳對應 resultN,皆不符回傳 default(可省略,預設 NULL)。
-- 取較小值 SELECT DECODE(SIGN(var1 - var2), -1, var1, var2) FROM DUAL; -- 取較大值 SELECT DECODE(SIGN(var1 - var2), 1, var1, var2) FROM DUAL;
來源表 目標結構: 轉換 SQL: 利用 SIGN(n) 回傳:負數 -1、零 0、正數 1。若 var1技巧二:列轉行(樞紐分析)
SALE:PRODUCT MONTH AMOUNT
A 1 100
A 2 200
B 1 150
PRODUCT JAN FEB
A 100 200
B 150 0
SELECT PRODUCT,
SUM(DECODE(MONTH, 1, AMOUNT, 0)) AS JAN,
SUM(DECODE(MONTH, 2, AMOUNT, 0)) AS FEB
FROM SALE
GROUP BY PRODUCT;
DECODE 將月份欄位轉為多欄位,再配合 SUM 聚合完成列轉行。