我使用了以下WHERE
子句
WHERE (TYPE1 = :P3_ITEM1 OR :P3_ITEM1 IS NULL)
过滤我对TYPE1的查询,当页面项P3_ITEM1不为null时,可以很好地显示相同TYPE1的记录。
现在,我需要为TYPE2和TYPE3添加两个过滤器。通常只有一个页面项P3_ITEM1,P3_ITEM2或P3_ITEM3不为空,因此我需要对不为空的任何一个进行过滤。
我尝试了
WHERE (TYPE1=:P3_ITEM1 OR :P3_ITEM1 IS NULL) OR
(TYPE2=:P3_ITEM2 OR :P3_ITEM2 IS NULL) OR
(TYPE3=:P3_ITEM3 OR :P3_ITEM3 IS NULL)
但是没有用。
我尝试在WHERE子句中使用CASE语句,但到目前为止没有成功。有人可以帮忙吗?
WHERE CASE
WHEN (:P3_ITEM1 IS NOT NULL) THEN (TYPE1=:P3_ITEM1)
WHEN (:P3_ITEM2 IS NOT NULL) THEN (TYPE2=:P3_ITEM2)
WHEN (:P3_ITEM3 IS NOT NULL) THEN (TYPE3=:P3_ITEM3)
答案 0 :(得分:1)
您可以简单地使用AND
组合各种过滤器。如果每个过滤器的参数为NULL
,则计算结果为true,因此,如果所有三个过滤器均为NULL
,则将获得所有记录,但您可以填写任意一个,甚至所有三个参数来过滤掉不需要的记录。
WHERE
(TYPE1 = :P3_ITEM1 OR :P3_ITEM1 IS NULL) AND
(TYPE2 = :P3_ITEM2 OR :P3_ITEM2 IS NULL) AND
(TYPE3 = :P3_ITEM3 OR :P3_ITEM3 IS NULL)