【问题标题】:Oracle: Insert a new row based on conditional logicOracle:根据条件逻辑插入新行
【发布时间】:2020-09-08 06:50:00
【问题描述】:

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

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 IS NOT NULL 并且 RSN_CD = XA,我必须插入一个行号 = 100 的新行。如果 RSN_AMT IS NOT NULL 和 RSN_CD = XB,我必须插入一个新行有 line number = 200。下面是我想要的结果。从 AMT_1 到 AMT_5 的数量必须设置为 0,并且 svc_cd 必须为空。新记录中的 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

请帮我解决这个问题,谢谢。

【问题讨论】:

    标签: sql oracle conditional-statements


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-04-17
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 2015-03-28
      • 2019-04-20
      • 1970-01-01
      相关资源
      最近更新 更多