【发布时间】:2017-03-28 12:56:06
【问题描述】:
在 Oracle 12(和 APEX)中,我遇到了 WHERE 子句中的 CASE 语句的问题。该场景是一个主表、ORDER 和一个 PRODUCTS_BOUGHT 表,因此这是一对多的关系。我有一份报告,在 PRODUCTS_BOUGHT 上有一个过滤器。过滤器填充名为:P36_PRODUCT_LISTING 的绑定变量/APEX 页面项。如果用户选择给定产品,我希望报告仅显示包含给定产品的订单。过滤器包含不应进行任何过滤的单词“All”,以及我们携带的每个产品。
我的SQL语句是
Select distinct
:P36_PRODUCT_LISTING,
LISTAGG(product_name, ', ') WITHIN GROUP (ORDER BY product_name) OVER (PARTITION BY B.SALES_ORDER_NUMBER) AS products,
...
from ORDER A, PRODUCTS_BOUGHT B
where
A.SALES_ORDER_NUMBER = B.SALES_ORDER_NUMBER
and
case when
:P36_PRODUCT_LISTING = 'All' then 1 = 1
else a.SALES_ORDER_NUMBER IN (SELECT SALES_ORDER_NUMBER from PRODUCTS_BOUGHT where PRODUCT_NAME = :P36_PRODUCT_LISTING) end
当我运行语句时,我得到的错误是缺少关键字。 我做错了什么?
【问题讨论】:
-
使用 AND/OR 代替大小写!