首页 > 解决方案 > 在 Oracle WHEN CASE 中使用多个条件

问题描述

我在 CASE 中使用 CASE 时遇到一些问题,我需要在 WHEN 子句中执行两次检查,但它失败了,例如:

CASE
WHEN trim(to_char(sysdate,'DAY')) = 'TUESDAY' THEN
CASE 
WHEN ((max(trunc(initial_date)) < trunc(sysdate)) AND name like 'Ma%') OR ((max(trunc(initial_date)) < trunc(sysdate)) AND name like 'Rna%') THEN 'something'
WHEN ((max(trunc(initial_date)) < trunc(sysdate)) AND name like '%ame') OR ((max(trunc(initial_date)) < trunc(sysdate)) AND name like '%ore') THEN 'somethingelse'
END
ELSE 'noproblemo'
END
as 'info',
'username' as username
from DBtable@dblink
where initialdate < trunc(sysdate)
and details = 'Criteria for search'

它现在抛出:

ORA-00937: 不是单组组函数 ORA-02063: DBLINK 的前一行

任何指针都非常感谢

标签: databaseoraclecase

解决方案


我想你错过了另一个END ,因为它是NESTED CASE EXPRESSION

CASE
    WHEN trim(to_char(sysdate,'DAY')) = 'TUESDAY' THEN
    (CASE 
    WHEN ((max(trunc(initial_date)) over() < trunc(sysdate)) AND name like 'Ma%') OR ((max(trunc(initial_date))  over() < trunc(sysdate)) AND name like 'Rna%') THEN 'something'
    WHEN ((max(trunc(initial_date))  over() < trunc(sysdate)) AND name like '%ame') OR ((max(trunc(initial_date)) over() < trunc(sysdate)) AND name like '%ore') THEN 'somethingelse'
    ELSE 'noproblemo'
    END)
    END,
    'username' as username
    from DBtable@dblink
    where initialdate < trunc(sysdate)
    and details = 'Criteria for search'

推荐阅读