【问题标题】:ORA-00905: Missing keyword in CASE expressionORA-00905: CASE 表达式中缺少关键字
【发布时间】:2017-10-03 01:34:24
【问题描述】:

我收到此错误“ORA-00905:缺少关键字 00905. 00000 - “缺少关键字” *原因:
*行动: 行错误:20 列:76"

在尝试运行以下查询时。

WITH t as (    
SELECT tot.student_id,
tot.first_name,
tot.last_name,
tot.track_date,
MAX(track_date) over (partition by tot.student_id) as max_track_date
from student tot
inner join student_backup toov
on tot.student_id = toov.student_id
AND CASE WHEN tot.track_date IS NULL THEN SYSDATE ELSE tot.track_date between    
toov.start_dt AND toov.start_dt + toov.duration/60/40 END 
where toov.course_id=163121)
SELECT * FROM t;

请帮助我解决这个问题。提前致谢

【问题讨论】:

  • @rawdog: AND 也可以在连接的 ON 条件下(类似于 WHERE)。

标签: sql oracle


【解决方案1】:
...
AND CASE WHEN tot.track_date IS NULL THEN SYSDATE ELSE tot.track_date between 
toov.start_dt AND toov.start_dt + toov.duration/60/40 END

那应该怎么做?你有一个CASE 表达式,WHEN... THEN... 并且你得到ELSE 子句。在ELSE 之后,您有一个列名,然后是关键字BETWEEN。这是没有意义的。 BETWEEN 是一个逻辑运算符,它在那里做什么?

进一步阅读:似乎您放错了关键字END。它属于之前关键字BETWEEN

【讨论】:

  • @MohsinALvi - 我已经回答:将单词 END 从现在的位置移到单词 BETWEEN 之前。我不知道查询是否正确(一开始你没有告诉我们要求是什么);但它会解决您在帖子中报告的语法错误。
  • 你是对的。我发布了错误的条件。无论如何感谢您的帮助:)
猜你喜欢
  • 2020-08-14
  • 2019-09-23
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 2023-01-02
  • 2018-06-18
相关资源
最近更新 更多