我有一个包含列和数据的表格,如下
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 月在单个查询中
一个简单的选择是使用
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>