两个月之间的情况 - ORA-00905:缺少关键字

问题描述 投票:0回答:1

我从另一个子查询中搭载了这个查询(有效),但我在 WHERE 中添加了一个 CASE 子句。它向我抛出“缺少关键字”错误,但我看不出问题所在。不幸的是,我周围没有人可以帮助我查找我猜测是一个我没有看到的非常小的错误。

案例本质上应该是说:

WHEN MONTH BETWEEN JAN AND JUN THEN START_DATE > 30/06/[CURRENT YEAR]
ELSE START_DATE > 30/06/[CURRENT YEAR] + 1
SELECT fp.object_id inv_id
      ,nvl(round(SUM((oc.finish_date - oc.start_date) * oc.slice)),0) forecast_amt
FROM odf_ssl_cst_dtl_cost oc
left join fin_cost_plan_details fd on fd.id  = oc.prj_object_id
left join fin_plans fp on fp.id = fd.plan_id
    and fp.plan_type_code = 'FORECAST'
    and fp.is_plan_of_record = 1 
WHERE CASE
    WHEN MONTH(GETDATE()) BETWEEN 1 AND 6 
        THEN oc.start_date > DATEADD(MONTH,6,DATEADD(DD,-1,DATEADD(YYYY, DATEDIFF(YYYY,0,GETDATE()),0)))
    ELSE oc.start_date > DATEADD(MONTH,6,DATEADD(DD,-1,DATEADD(YYYY, DATEDIFF(YYYY,0,GETDATE())+1,0)))
END
GROUP BY fp.object_id
sql oracle case
1个回答
0
投票

CASE
返回一个值,但您不能使用它来将布尔值返回到
WHERE
条件。

重写

WHERE
子句,将比较移至 CASE
外部
,并让
CASE
仅返回要比较的值:

WHERE oc.start_date >
    CASE
         WHEN MONTH(GETDATE()) BETWEEN 1 AND 6 
            THEN DATEADD(MONTH,6,DATEADD(DD,-1,DATEADD(YYYY, DATEDIFF(YYYY,0,GETDATE()),0)))
        ELSE DATEADD(MONTH,6,DATEADD(DD,-1,DATEADD(YYYY, DATEDIFF(YYYY,0,GETDATE())+1,0)))
    END
© www.soinside.com 2019 - 2024. All rights reserved.