Oracle使用CASE WHEN与SUM写查询报缺失右括号/关键字问题求助
Oracle查询报错排查与修复方案
首次报错(缺失右括号)原因
Oracle 不支持 SUM(布尔表达式) 这类简化语法(该写法仅在MySQL等少数数据库中生效),你在SUM函数中直接写入status = 'DELIVERED'判断逻辑,SQL解析器无法识别该表达式结构,误以为语句未闭合,因此抛出缺失右括号的错误。
第二次报错(缺失关键字)原因
调整后的写法存在两处语法错误:
SUM(c.status)属于逻辑错误:status是字符串类型字段,SUM函数仅支持对数值类型做聚合运算,无法对字符串求和- 连续等号
SUM(c.status) = 'DELIVERED' = (count(c.status))不符合Oracle语法规则,SQL解析器无法匹配到预期的逻辑关键字,因此抛出缺失关键字的错误。
正确修复方案
你需要把判断逻辑放到SUM内部的CASE WHEN语句中,对符合条件的行计数1、不符合的计数0,求和后的值就是符合条件的总行数,正确代码如下:
SELECT c.Customer_name, CASE WHEN SUM(CASE WHEN c.status = 'DELIVERED' THEN 1 ELSE 0 END) = count(*) THEN 'A' WHEN SUM(CASE WHEN c.status = 'DELIVERED' THEN 1 ELSE 0 END) > 0 THEN 'B' WHEN SUM(CASE WHEN c.status = 'SUBMITTED' THEN 1 ELSE 0 END) > 0 THEN 'C' ELSE 'No Match' END AS Match FROM Customer_Order c GROUP BY c.Customer_name ORDER BY c.Customer_name;
内容的提问来源于stack exchange,提问作者Student of the Digital World
相关产品推荐
相关产品推荐

