我从另一个子查询中携带了这个查询(可以工作),但我在WHERE中添加了一个CASE子句.它给我抛出了一个"缺少关键字"的错误,我看不出是什么问题.不幸的是,我周围没有人可以帮助我寻找我猜是一个我没有看到的非常小的错误.

这个 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

推荐答案

CASE返回值,但不能使用它将布尔值返回给WHERE条件.

重写WHERE子句以将比较outside移至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

Sql相关问答推荐

在SQL中查询SQL以返回NULLS和空数据集的 node 列表

前面的语句不喜欢AND LIKE?当try 更新使用ID和日期过滤的表时

使用Lead获取下一个不同的日期

连接特定行号

计算周时出现SQL错误结果

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

如何在PostgreSQL中的一列中添加两个文本?

正在try 从SQL获取最新的ID和一个唯一名称

将所有XML文件导入到SQL Server中

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

以一致的价值获得独特的价值

合并分层表SQL中的第一个非空、变化的空位置

SQL将三个表中的三列组合为一列

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

为什么SQL in中的空子查询有时被视为null

如何根据创建日期查找两个表中最接近的记录?

SQL Server:时态表并在运行时添加计算列

如何根据 SQL Server 中 1 条语句中 SELECT 的结果进行 INSERT 或 UPDATE

SQL 多个不满足的条件失败

MIN MAX 值与条件绑定