首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle DECODE 函數進階技巧:大小比較與列轉行

     編輯:Oracle 資料庫基礎

環境

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;

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

轉換 SQL:

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 聚合完成列轉行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved