我有一个表,其中包含名为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
答案 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