>我有一个包含以下行和列的表格
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';