在編程中,常用到if - then -else等邏輯判斷,這時能夠採用decode函數來代替。sql
1.decode函數語法以下:編程
decode(value,if 1,then 1,if 2,then 2,......else)函數
value表示標的某一列或一個計算得出的結果。當value的值爲1時,decode函數的結果是then1;若是value的值是2時,decode函數的結果是then2,以此類推。若是value的值沒有與任何配對時,decode的結果返回else。code
2.應用舉例class
表以下:語法
SQL以下:im
SELECT "DECODE"(flag, 0,COUNTS) FROM T_STOCKHISTORY;
結果以下:統計
備註:能夠得知SQL完成的功能是 將表中flag = 0的counts數取出來。數據
3.統計如上表中flag=0時的counts和值img
SELECT "SUM"("DECODE"(flag, 0,COUNTS)) FROM T_STOCKHISTORY;
結果以下:
4.統計flag=0時counts和值 與 flag=1時的counts和值 之差
實際意義:假設flag=0表示進貨,flag=1表示出貨;counts表示數量。
如上4的功能即爲完成:求剩餘庫存量
SELECT "SUM"("DECODE"(flag, 0,COUNTS))-"SUM"("DECODE"(flag, 1,COUNTS)) FROM T_STOCKHISTORY;
結果以下:
備註:即到目前爲止,庫存剩餘總量爲10.
5.求庫存量歷史記錄
即:獲得一列數據,flag=0時,某行加數據;flag=1時,某行減數據。
思路:
要想獲得一列數據,應該使用窗口函數
窗口函數在求第n+1行數據總和時,先判斷用第n行的數據總和加(flag=0)第n+1行的數據仍是減(flag=1)第n+1行的數據。