2016-09-29 98 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()就不會。