**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由一个错字或一个无法再复制的问题引起的。虽然类似的问题可能是on-topic在这里,但这个问题的解决方式不太可能帮助未来的读者。
6天前关闭。
Improve this question
我写了一个SQL查询,从employee、assignment、payment、emp_period和assignment_master表中获取员工的名字、姓氏描述。下面是我的SQL查询:
Select e.first_name,e.Last_name,a.description,p.paycode,am.leave_code
from employee e, assignment a, payment p
left outer join assignment_master am on p.paycode= case when ascii(am.leave_code) is null then N'184645' else am.leave_code end
and p.start_date='13/02/2021',
emp_period ep;
当我在Oracle中运行这个时,我得到一个错误ORA-00905: 'Missing Keyword'
。我发现Case不能在From子句中使用,有人知道我如何在select中使用这个CASE并获得相同的reselt吗?
2条答案
按热度按时间qcuzuvrc1#
这是相当困难的,因为你没有张贴这些表之间的关系,所以我只是猜测,但是-这就是你的查询应该看起来像。
基本上,连接表的列彼此相关。对于
CASE
,你可以使用它,但你发布的那个可以简化为coalesce
。对于date值(假设start_Date
列的数据类型是date
),不要将它与sting比较,而是与date比较(要么是date文字,就像我做的那样,要么使用具有适当格式模型的to_date
函数)。切换到
JOIN
s,不要混合使用两个选项(from
子句中的逗号分隔表列表,where
子句中的joins-将其留给 conditions)。如果你把它们混合在一起,你可能会得到一个错误,即使 * 一切 * 看起来都很好:
正确连接:
ovfsdjhp2#
您没有收到
case when
的错误,而是收到N'184645'
的错误。请改用CAST('184645 ' AS NCHAR(6))。Oracle支持case when
条件。如果条件是
am.leave_code is null
,则可以使用NVL()
完成