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>
我被困在 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>