【问题标题】:How to change 2 column values with a case statement in oracle sql如何在 oracle sql 中使用 case 语句更改 2 列值
【发布时间】:2017-02-07 22:51:57
【问题描述】:

我正在寻找如何根据 case when 语句更改 2 列中的值。

下面是表格数据的一个示例(实时数据有大约 60 列,我引入了但只有这一列:

QUEUE | NOTES
12345 | Lorem 
12345 | ipsum
45678 | dolor
78901 | sit
90123 | amet

现在我编写了以下查询,它提供了第一部分:

SELECT
  CASE
    WHEN SUBSTR (QUEUE, 1, 2) = '12'
  THEN 'Abandoned'
  ELSE QUEUE
  END AS QUEUE,
  NOTES
FROM
  TABLE_1
;

我需要进行的第二步是基于第一个案例陈述。如果队列字段放弃了队列,那么我需要将注释字段替换为“由用户 AN 29.09.16 修改的队列”的文本,但我不知道该怎么做。

我猜我可以将它写在一个子选择查询中,但我不知道我如何定位如果一个列值等于某个值然后替换另一个列值。还想知道是否可以在一个案例语句中全部编写...

如果有人可以请建议。

谢谢

【问题讨论】:

  • 案例表达,不是案例陈述。 (它返回一个值。)

标签: sql oracle case


【解决方案1】:

对注释列也使用 CASE 表达式

SELECT
  CASE
     WHEN SUBSTR (QUEUE, 1, 2) = '12'
     THEN 'Abandoned'
     ELSE QUEUE
  END AS QUEUE,
  CASE
     WHEN SUBSTR (QUEUE, 1, 2) = '12'
     THEN 'Queue Amended by User AN 29.09.16'
     ELSE NOTES
  END  AS Notes
FROM
TABLE_1

【讨论】:

  • 感谢 Jaydip,只是为了澄清一下,是否会用“用户 AN 29.09.16 修改的队列”覆盖注释字段中的现有注释,还是会添加另一个带有注释字段的列?
  • 当队列被放弃时,它才会用给定的字符串替换 Note,它会在同一列中为 Notes 提供任何内容
【解决方案2】:

假设您实际上并不想更新基础 table_1 而是只显示结果,那么您只需为第二列重复 case 语句:

SELECT
  (CASE
    WHEN SUBSTR (QUEUE, 1, 2) = '12'
  THEN 'Abandoned'
  ELSE QUEUE
  END) AS QUEUE,

  (CASE
    WHEN SUBSTR (QUEUE, 1, 2) = '12'
  THEN 'Queue Amended by User ' ||user ||' '|| to_char(sysdate, 'DD.MM.RRRR')
  ELSE NOTES
  END) AS NOTES
FROM table_1

【讨论】:

  • 谢谢大家,我想我必须继续更新表格,因为我需要确保如果其他人使用表格,那么这些信息是现成的。此外,我尝试了 Jaydip 的查询,该查询可以正常工作,但由于已经有一个注释字段,因为我有一个 select * 然后显示列不明确定义(作为原始注释字段),因此必须键入每个列名栏原始注释才能工作。 ..
【解决方案3】:

如果您有一个名为 table_1 的表,其列 queuenotes 包含示例输入中的当前值,并且您必须按照您的描述更新表,这很容易(并且您不需要“case” 表达式或两个,你只需要一个 WHERE 过滤器):

update table_1
   set queue = 'Abandoned',
       notes = 'Queue Amended by User AN 09.29.16'
where  queue like '12%'
;

(或者 NOTES 的值可以与 User 和/或 Date 的变量连接,如 E. Ninis 在他/她的解决方案中所示。)请注意,“like”条件将允许 Oracle 使用您可能拥有的索引在queue 列上;使用substr() 不会。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多