SQL之更改累积和的值

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

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 PY

6 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       -100

6 rows selected

SQL> 

第二步,使用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        -50

6 rows selected

SQL> 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值