我正在尝试在sql查询中获取'CE.TITLE'列表中重复的所有值的'more'。我做了一个简短的案例,但以错误告终。
CASE
WHEN having count(CE.TITLE) > 1
THEN 'More'
ELSE 'ok'
END as more than one job
Error:
ORA-0093: missing expression
0036. 0000 - "missing expression"
*Cause:
*Action:
Error at Line: 46 Column: 10
任何帮助将不胜感激
答案 0 :(得分:2)
having
不适合:
(CASE WHEN count(CE.TITLE) > 1
THEN 'More'
ELSE 'ok'
END) as more_than_one_job
这修复了语法错误,并假定整体查询是聚合查询。如果没有,则可以使用窗口函数(在MySQL 8+中)。我猜您真正想要的逻辑是:
(CASE WHEN count(*) over (partition by CE.TITLE) > 1
THEN 'More'
ELSE 'ok'
END) as more_than_one_job
在早期版本中,您可以使用相关子查询。我的偏好是:
(CASE WHEN EXISTS (SELECT 1
FROM ce ce2
WHERE ce2.title = ce.title AND
ce2.id <> ce.id
)
THEN 'More'
ELSE 'ok'
END) as more_than_one_job