Oracle Apex - Select 列表 - 一个选项有多个值

Oracle Apex - Select List - one option with multiple values

我被困在 Oracle Apex(22.1.0-17) 中的一个微不足道的场景中。

我有一份经典报告,其中包含一些“通知”(如下所示)和一个标志 - 如果 table 中的某些特定记录被读取或未被读取(理论上) - Y/N 值在 IS_READ 列中。

Notification report

我想根据记录的标志对记录进行全面过滤,这就是我使用 Select 列表(Select2 - 老实说,插件)的原因,并且基本上,我已经得到了我想要的,但是缺少一个选项。在 select 列表中,我希望在 select 列表中具有完全 select 可用的“全部”选项,它将传递“Y”和“No”值,并允许显示经典报表中的所有记录。

我曾尝试将 LOV 与下面的简单 SQL 查询一起使用,但它不起作用。

SELECT 
IS_READ,
(CASE   WHEN IS_READ = 'Y' THEN 'Yes'
        WHEN IS_READ = 'N' THEN 'No'
        WHEN IS_READ = NVL(:P2_IS_READ, IS_READ) THEN 'All'
        END
) as IS_READ2
FROM
NOTIFICATION
group by IS_READ;

有人可以指导我如何在 select 列表中实现这个“全部”选项(但不是作为“显示空值”)吗?

提前致谢!

这是我通常做的事情。我将有一个标准的 Select 列表项(它不必是 Select2)和 Yes/No 静态值(return Y/N)。然后我将项目显示一个空值,我将其标记为“全部”。

像这样:

然后在相应的查询中,我会有这样一个where子句:

select ...
from ...
where ...
and (:P2_IS_READ is null       -- will show everything when you select the "All"
     or :P2_IS_READ = IS_READ  -- only show what matches
     )

这是一种选择:

Select 列表 LoV 查询:

SQL> select 'Yes' d, 'Y' r from dual union all
  2  select 'No'  d, 'N' r from dual union all
  3  select 'All' d, 'A' r from dual;

D   R
--- -
Yes Y
No  N
All A

SQL>

经典报表查询:

select *
from notification
where is_read = case when :P1_IS_READ = 'Y' then 'Y'
                     when :P1_IS_READ = 'N' then 'N'
                     when :P1_IS_READ = 'A' then is_read
                end
order by id;

为了说明它(使用 SQL*Plus;切换到替换变量),示例 table:

SQL> select * from notification;

        ID NAME   IS_READ
---------- ------ -------
         1 Little Y
         2 Foot   N
         3 Crisp  N
    

阅读通知:

SQL> select *
  2  from notification
  3  where is_read = case when '&&P1_IS_READ' = 'Y' then 'Y'
  4                       when '&&P1_IS_READ' = 'N' then 'N'
  5                       when '&&P1_IS_READ' = 'A' then is_read
  6                  end
  7  order by id;
Enter value for p1_is_read: Y

        ID NAME   IS_READ
---------- ------ -------
         1 Little Y

Not-read 个通知:

SQL> undefine p1_is_read
SQL> /
Enter value for p1_is_read: N

        ID NAME   IS_READ
---------- ------ -------
         2 Foot   N
         3 Crisp  N

所有通知:

SQL> undefine p1_is_read
SQL> /
Enter value for p1_is_read: A

        ID NAME   IS_READ
---------- ------ -------
         1 Little Y
         2 Foot   N
         3 Crisp  N

SQL>