oracle --decode函数

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

思路:

  1. 要想获得一列数据,应该使用窗口函数

  2. 窗口函数在求第n+1行数据总和时,先判断用第n行的数据总和加(flag=0)第n+1行的数据仍是减(flag=1)第n+1行的数据。

相关文章
相关标签/搜索