预言机:根据条件逻辑插入新行



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

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_AMT不是 NULL 并且 RSN_CD = XA,我必须插入一行号 = 100 的新行。如果RSN_AMT不是 NULL 并且 RSN_CD = XB,我必须插入一个行号 = 200 的新行。下面是我想要的结果。从 AMT_1 到 AMT_5 的金额必须设置为 0,并且svc_cd必须为 null。新记录中的svc_dt必须具有给定 id 的最新行svc_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

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

您可以使用几个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';

最新更新