【问题标题】:How to combine column using case condition in oracle sql如何在oracle sql中使用case条件组合列
【发布时间】:2021-03-31 12:13:58
【问题描述】:

我有一张下表

id name addr 1 addr 2 EXTRA
1 aaa US RED
1 bbb IN IN YELLOW
1 ccc US RED
1 ccc IN IN ORANGE
1 ccc EU GREEN

如上表所示,您可以看到我想将 EXTRA col 的 IN 值带入 addr2 列,覆盖 addr2 中的值。我想应用案例条件或解码来实现这一点。

id name addr 1 addr 2
1 aaa US RED
1 bbb IN YELLOW
1 ccc US RED
1 ccc IN ORANGE
1 ccc EU GREEN

提前致谢。

【问题讨论】:

  • 为什么要“应用案例条件或解码来实现这一点”?您为什么关心如何解决问题?案例表达或解码只是您可以使用的一些工具;通常问题陈述不需要必须使用什么工具。你可能有充分的理由去做这件不寻常的事情;但如果你有充分的理由,你没有与我们分享。
  • 还要注意 SQL 有 case 表达式。 PL/SQL(但不是 SQL)也有一些叫做“case statements”的东西——无论如何与你的问题完全无关。在 SQL 或 PL/SQL 中都没有 case condition 这样的东西。

标签: sql oracle


【解决方案1】:

如果我理解正确,你可以使用coalesce()

select t.*,
       coalesce(extra, addr2) as new_addr2
from t;

如果要更改表中的数据,则使用update

update t
    set addr = extra
    where extra is not null;

【讨论】:

    【解决方案2】:

    如果您想在您的 select 语句中执行此操作,您可以使用以下语句:

    select  id
            , name
            , addr1
            , case when EXTRA IS NULL THEN addr2 ELSE EXTRA END as addr2
    from    tablename
    ;
    

    如果您想更改表格中的日期,则可以使用:

    update tablename
    set addr2 = EXTRA
    where EXTRA is not null;
    

    【讨论】:

    • 我不这么认为; “IN”(从我的角度来看)代表“印度”,因此您必须解码世界上几乎所有国家/地区才能使该代码正常工作。 COALESCE 是一条路要走(再次,从我的角度来看)。
    • 我同意你的看法,但要求解码和案例来解决这个问题。他还可以使用具有空条件的案例来解决该问题。我会更新我的评论。谢谢你的关注。好点子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    相关资源
    最近更新 更多