2013-07-04 86 views
-1

我有一張表,其中包含名爲queues的名稱列表。所有這些隊列中有一些數據(integer)現在在某些情況下,我想兩個隊列是爲一個,因此我試圖創建下面的語句:Oracle SQL if else字符串

(case when QUEUE in ('Erhverv', 'ErhvervOverflow') then 'Erhverv' 
      ELSIF WHEN QUEUE in ('Hotline', 'TekniskHotline') then Hotline+TekniskHotline' 
      else QUEUE end 
    ) as QUEUE, 

但是它似乎並沒有工作。

誰能告訴我我做錯了什麼?

完整的SQL語句

SELECT TRUNC(TIDSPUNKT) AS PERIOD, 
     (CASE queue WHEN queue in ('Erhverv', 'ErhvervOverflow') 
then 'Erhverv' WHEN queue in ('Hotline', 'TekniskHotline') 
then 'Hotline+TekniskHotline' ELSE QUEUE end) as QUEUE, 
     SUM(ANTAL_KALD) AS CALLS, 
     SUM(INTERN_KALD) AS INTERNAL_CALLS 
FROM  KS_DRIFT.PERO_NKM_KØ_OVERSIGT 
WHERE TIDSPUNKT >= '2013-06-18' 
AND  TIDSPUNKT <= '2013-07-03' 
GROUP BY TRUNC(TIDSPUNKT), QUEUE 
+0

「它似乎沒有工作」不是很有幫助。請告訴我們實際發生的情況,包括您收到的任何錯誤消息。顯然在這種情況下,你有一些語法錯誤,但我們不應該猜測。記住,只有*你*可以看到你的屏幕:我們只知道你告訴我們什麼。 – APC

回答

1

ELSIF是分支IF語句不CASE語句。只需使用WHEN:

(case 
    when QUEUE in ('Erhverv', 'ErhvervOverflow') then 'Erhverv' 
    when QUEUE in ('Hotline', 'TekniskHotline') then 'Hotline+TekniskHotline' 
    -------------------------------------------------^ missing quote 
    else QUEUE end 
) as QUEUE, 

另外,您在第二個子句中缺少引號,它肯定無法幫助您的代碼進行編譯。

關於您的更新,as the documentation shows CASE有兩種不同的語法。請使用簡單CASE語法...

case queue 
    when 'ErhvervOverflow' then 'Erhverv' 
    when 'Hotline' then 'Hotline+TekniskHotline' 
    when 'TekniskHotline' then 'Hotline+TekniskHotline' 
    else queue 
end case 

...或者查詢語法...

case 
    when queue in ('ErhvervOverflow', 'Erhverv') then 'Erhverv' 
    when queue in ('Hotline' , 'TekniskHotline') then 'Hotline+TekniskHotline' 
    else queue 
end case 

你的錯誤是同時使用兩種語法的嘗試原因。

+0

這工作! :) 謝謝 –

0

嘗試

(CASE queue 
WHEN queue in ('Erhverv', 'ErhvervOverflow') then 'Erhverv' 
WHEN queue in ('Hotline', 'TekniskHotline') then 'Hotline+TekniskHotline' 
ELSE QUEUE 
end) as QUEUE 
+0

我收到一個錯誤缺少表達式 –

+0

@MarcRasmussen:更新我的答案 – sarwar026

+0

現在即時失蹤關鍵字ive更新我的帖子給我完整的聲明我到目前爲止 –