【问题标题】:SQL ORACLE ERROR: ORA-00905 Missing KeywordSQL ORACLE 错误:ORA-00905 缺少关键字
【发布时间】:2022-01-11 02:09:51
【问题描述】:

我正在使用 Oracle SQL Developer。对 SQL 来说真的很陌生,不知道为什么会出现这个错误。

错误:

ORA-00905: 缺少关键字 00905. 00000 - “缺少关键字” *原因:
*行动: 行错误:1 列:128

SELECT r.ROOM_ID, w.HEAD_NURSE, w.WARD_NAME, p.LEAVING_DATE, count(CASE p.PATIENT_ID when to_date('2022-01-07', 'YYYY-MM-DD') < p.LEAVING_DATE then 1 else null END) AS No_Of_Patients_In_Room
FROM ROOM r, WARD w, PATIENT_DETAILS p
WHERE r.HEAD_NURSE = 'Some Nurses Name' AND w.WARD_NAME = 'Some Ward Name' AND p.ROOM_ID = r.ROOM_ID
group by r.ROOM_ID, w.HEAD_NURSE, w.WARD_NAME, p.LEAVING_DATE;

仅当 LEAVING_DATE 晚于指定日期时才应计算 PATIENT_ID。我可以删除 LEAVING_DATE 已经超过该日期的数据,但我仍然想知道是什么导致了这个错误。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    CASE 语法有两种形式。

    不要混用。

    select n
    , case n
      when 1 then 'A'
      when 2 then 'B'
      else 'C'
      end as form1
    from (select 1 as n from dual) q
    
    N |表格1 -: | :---- 1 |一个
    select n
    , case 
      when n=1 then 'A'
      when n>1 then 'B'
      else 'C'
      end as form2
    from (select 2 as n from dual) q
    
    N |表格2 -: | :---- 2 |乙
    select n
    , case n
      when n=1 then 'A'
      when n>1 then 'B'
      else 'C'
      end as badmix
    from (select 3 as n from dual) q
    
    ORA-00905: 缺少关键字

    db小提琴here

    所以这是错误的:

    CASE p.PATIENT_ID when to_date('2022-01-07', 'YYYY-MM-DD') < p.LEAVING_DATE then 1 else null END
    

    【讨论】:

    • 谢谢,我想我明白这一点,但不确定它是否也能满足我的需要。你知道如何让它显示特定病房中的所有 ROOM_ID 以及每个房间中的所有 PATIENT_ID 吗?让我感到困惑的部分是表格中有旧数据,因此我需要确保房间中的 PATIENT_ID 的 LEAVING_DATE 晚于当前日期。
    • 基本上,如果 LEAVING_DATE 超过了我认为指定的日期,我需要它只计算 PATIENT_ID。
    • 类似COUNT(CASE WHEN p.LEAVING_DATE &gt; SYSDATE THEN p.PATIENT_ID END)
    • 感谢代表。顺便说一句,我应该注意一些事情。如果要计算唯一 ID,请添加 DISTINCT。 COUNT(DISTINCT CASE WHEN p.LEAVING_DATE &gt; SYSDATE THEN p.PATIENT_ID END)
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2023-03-22
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    相关资源
    最近更新 更多