Oracle SQL if else String

时间:2013-07-04 13:59:17

标签: sql oracle case

我有一个表,其中包含名为queues的名称列表。所有这些队列都有一些数据(integer)现在在某些情况下我希望其中两个队列为一个,因此我尝试创建以下语句:

    (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

2 个答案:

答案 0 :(得分: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

您的错误是由于尝试同时使用这两种语法造成的。

答案 1 :(得分:0)

尝试

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