2016-09-29 95 views
1

我在查找如何根据语句中的情况更改2列中的值。如何在oracle中使用case语句更改2列值sql

表数据的下面是一个例子(实时数据,大约有60列,我有带来,但仅此列:

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

现在我已经写了下面的查询,让我第一部分:

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

,我需要进行第二步是根据第一个case语句,如果队列领域已经放弃了队列,然后我需要用文字说“队列由用户提供29.09修订,以取代笔记场。 16',但我不确定我是如何去做的。

我猜我可以写在一个子选择查询,但我不知道我是如何定位如果一列值等于某些东西,然后替换另一列值。也想知道是否有可能把它写在一个案件陈述...

如果有人可以请指教。

感谢备注栏

+0

案例表达式,不是case语句。 (它会返回一个值。) – jarlh

回答

0

使用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 
+0

感谢Jaydip,只是为了澄清将用'用户AN 29.09.16'队列修改注释字段中的现有注释还是会添加另一个带注释字段的列? – user3191160

+0

当队列被放弃时,只有这样它才会替换注释与给定的字符串ow它会给任何内容在同一列NOTES –

0

假设你没有真正想要更新基础TABLE_1但只给出了结果,那么你只需要重复的情况下语句第二栏:

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 
+0

感谢家伙,我想我将不得不沿着更新表的路线,因为我需要确保如果其他人使用该表格,那么这些信息很容易获得。另外我尝试了Jaydip的查询,它可以正常工作,但由于已经有一个备注字段,因为我有一个select *,然后显示明确定义的列(作为原始备注字段),因此必须键入每个列名称栏的原始备注才能工作。 .. – user3191160

0

如果你有一个与列queue和称为table_1表与您的样本输入中的当前值一致,并且您必须按照您所描述的更新表格,这很容易(并且您不需要“case”表达式或两个,所有您需要的是WHERE过滤器):

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

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