【发布时间】:2016-04-01 20:11:11
【问题描述】:
我有一个 SSRS 报告,其中有一个参数要求用户包括收入大于零的记录,或收入值仅为零的记录。
由于查询不是存储过程并且不能将其放入过程中,因此我需要为嵌入式查询使用一些案例逻辑。我需要在最后的 where 子句中执行此操作。
我正在尝试做这样的事情:
SELECT * FROM TABLE
WHERE MY_DATE BETWEEN D_START AND D_END
AND
CASE
WHEN :REVENUE = 1 THEN REV != 0
WHEN :REVENUE = 2 THEN REV = 0
END
但是,当我运行此查询时,我收到以下错误:
ORA-00905: missing keyword
我正在做的事情是不可能的吗?或者是否有人可以看到并帮助我解决错误?
请帮忙。谢谢!
更新:澄清一下,用户传递的值是 1 或 2。查询应该根据传递给它的值过滤数据。如果参数中传入1,则过滤掉所有不等于0的收益。否则,如果通过了两个,则进行过滤,以便仅返回收入为零的记录。
【问题讨论】:
-
可以在 WHERE 子句中使用 CASE 表达式和参数。我提供了几个示例来证明这一点,并解释了为什么 Oracle 对原始语句的语法犹豫不决。 (选择的答案似乎暗示在 WHERE 子句中不能使用 CASE 表达式。)
-
@spencer7593:看起来我确实排除了 WHERE 条件的 CASE;已编辑,谢谢。 Zolt:公平地说,公认的答案应该是斯宾塞的,比我的要好很多
-
@Aleksej:OP 应该选择最适合他需要的答案。正如您的回答(正确)指出的那样,OP 在
WHERE子句中不需要CASE表达式。我的回答远远超出了这个范围,并解释了为什么 Oracle 在 OP 查询中犹豫不决(找到一个 condition 它需要一个 value 和一个 value 它需要一个条件。(我的回答是针对标题中更一般的问题...“如何在 WHERE 子句中使用 CASE 表达式和参数”。
标签: oracle parameters case where-clause