oracle:基于条件逻辑插入新行

iklwldmw  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(347)

我有一个包含以下行和列的表

id  line  rsn_cd   rsn_amt   svc_cd       svc_dt    AMT_1  AMT_2  AMT_3  AMT_4  AMT_5 
 1    1     XA       15       AB       01/01/2020   10    20      30      40     50
 1    2     XA       15       AC       01/15/2020   0      0      10       0     30
 2    1     XB       10        AX       02/10/2020   35     40     50      12     0
 2    2     XB       10        AZ       02/15/2020   12     51     90      12     0

根据这个条件,如果rsn\u amt不为空并且rsn\u cd=xa,我必须插入一个行号为100的新行。如果rsn\u amt不为空并且rsn\u cd=xb,则必须插入行号为200的新行。下面是我想要的结果。金额1到金额5之间的金额必须设置为0,并且svc\u cd必须为空。新记录中的svc\u dt必须具有给定id的最新行svc\u dt。

id  line  rsn_cd   rsn_amt   svc_cd       svc_dt    AMT_1  AMT_2  AMT_3  AMT_4  AMT_5 
 1    1     XA       15       AB       01/01/2020   10    20      30      40     50
 1    2     XA       15       AC       01/15/2020   0      0      10       0     30
 1   100    XA       15       null     01/15/2020   0      0       0       0     0
 2    1     XB       10        AX      02/10/2020   35     40     50      12     0
 2    2     XB       10        AZ      02/15/2020   12     51     90      12     0
 2    200   XB       10        null    02/15/2020    0      0      0       0     0

请帮我弄清楚这个,谢谢。

woobm2wo

woobm2wo1#

你可以用几个 INSERT 声明:

insert into my_table (
  id, line, rsn_cd, rsn_amt, svc_cd, svc_dt, 
  AMT_1, AMT_2, AMT_3, AMT_4, AMT_5
)
select
  id, 100, rsn_cd, rsn_amt, null, 
  (select max(b.scv_dt) from my_table b where b.id = a.id),
  0, 0, 0, 0, 0
from my_table a
where rsn_amt is not null and rsn_cd = 'XA';

以及:

insert into my_table (
  id, line, rsn_cd, rsn_amt, svc_cd, svc_dt, 
  AMT_1, AMT_2, AMT_3, AMT_4, AMT_5
)
select
  id, 200, rsn_cd, rsn_amt, null,
  (select max(b.scv_dt) from my_table b where b.id = a.id),
  0, 0, 0, 0, 0
from my_table a
where rsn_amt is not null and rsn_cd = 'XB';

相关问题