我有一个更新表数据的场景

问题描述 投票:0回答:1

我有一个包含列和数据的表格,如下

id    from_date      to_date   value  change_date
10    jan-2021      dec 2021    100    dec-2021
10    jan-2022      dec 2022    100    dec-2022
10    jan-2023      dec 2023    100    dec-2023

我必须同时将 2023 年 1 月期间的 100 值更新为 200 我需要更新 2022 年 1 月和 2021 年 1 月记录的change_date 从 2022 年 12 月到 2022 年 11 月以及 2021 年 12 月到 2021 年 11 月在单个查询中

oracle plsql
1个回答
0
投票

一个简单的选择是使用

case
表达式。

由于您没有指定列的数据类型,因此我简化了此示例并使用了strings

之前:

SQL> select * from test order by from_date;

        ID FROM_DAT TO_DATE       VALUE CHANGE_D
---------- -------- -------- ---------- --------
        10 jan-2021 dec-2021        100 dec-2021
        10 jan-2022 dec-2022        100 dec-2022
        10 jan-2023 dec-2023        100 dec-2023

更新:

SQL> update test set
  2    value = case when from_date = 'jan-2023' then 200 else value end,
  3    change_date = case when from_date = 'jan-2021' then 'nov-2021'
  4                       when from_date = 'jan-2022' then 'nov-2022'
  5                       else change_date
  6                  end;

3 rows updated.

之后:

SQL> select * from test order by from_date;

        ID FROM_DAT TO_DATE       VALUE CHANGE_D
---------- -------- -------- ---------- --------
        10 jan-2021 dec-2021        100 nov-2021
        10 jan-2022 dec-2022        100 nov-2022
        10 jan-2023 dec-2023        200 dec-2023

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.