SQL之更改累积和的值

来源:互联网 发布:hl线切割编程软件 编辑:程序博客网 时间:2024/06/10 16:56

首先创建一个示例的视图:

SQL> create or replace view test_sum(id ,amt,trx)  2  as  3  select 1,100,'PR' from dual union all  4  select 2,100,'PR' from dual union all  5  select 3,50,'PY' from dual union all  6  select 4,100,'PR' from dual union all  7  select 5,200,'PY' from dual union all  8  select 6,100,'PY' from dual;View created.SQL> select * from test_sum;    ID    AMT TR---------- ---------- --     1    100 PR     2    100 PR     3     50 PY     4    100 PR     5    200 PY     6    100 PY6 rows selected.SQL> 

此视图模拟存取款视图
id 是唯一列
amt 表示每次事务处理(取款/存款)涉及的类型
trx 定义事务处理的类型,取款是PY,存款是PR

需求:计算每次存、取款后的金额,如果TRX是PR,则加上AMT所代表的金额,否则减去。

第一步:首先把取款的值变为负数

SQL> select id,  2  case when trx = 'PR' then '存款' else '取款' end 存取类型,  3  amt 金额,  4  case when trx = 'PR' then amt else -amt end 变更后的值  5  from test_sum  6  order by id;        ID 存取类型         金额      变更后的值---------- -------- ---------- ----------         1 存款            100        100         2 存款            100        100         3 取款             50        -50         4 存款            100        100         5 取款            200       -200         6 取款            100       -1006 rows selectedSQL> 

第二步,使用sum分析函数

SQL> select id,  2  case when trx = 'PR' then '存款' else '取款' end 存取类型,  3  amt 金额,  4  sum(case when trx = 'PR' then amt else -amt end) over(order by id) as 余额  5  from test_sum  6  order by id;        ID 存取类型         金额         余额---------- -------- ---------- ----------         1 存款            100        100         2 存款            100        200         3 取款             50        150         4 存款            100        250         5 取款            200         50         6 取款            100        -506 rows selectedSQL> 

到此,更改累计和的值的步骤就已经做完了。

原创粉丝点击