在编程中,常用到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行的数据。