oracle - 如何在 Oracle APEX 中正确过滤具有自定义格式的数字列?

标签 oracle oracle-apex

在我们的 APEX 报告中,我们使用自定义数字格式将数值四舍五入到给定(用户定义的精度)。例如。鉴于此数据:

create table round_test(pk number not null primary key, value number);
insert into round_test(pk, value) values (1, 0.11);
insert into round_test(pk, value) values (2, 0.19);
insert into round_test(pk, value) values (3, 0.20);
insert into round_test(pk, value) values (4, 0.21);
insert into round_test(pk, value) values (5, 0.23);
insert into round_test(pk, value) values (7, 0.28);

我创建了一个交互式报告来显示 VALUE列格式 999D9 (出于说明目的,我添加了一个 ORIGINAL_VALUE 列,该列显示没有数字格式的数据,即全精度 - 请参见下面的屏幕截图)。

现在,如果我单击列标题以按此列进行过滤,则会得到重复值(例如 0.2 出现四次 - 一次是 0.19、0.20、0.23 和 0.28):

Filter drop down

这已经够糟糕了,但是如果我单击这些值之一,APEX 将按确切值而不是四舍五入的值进行过滤:

Filter result

我怎样才能
  • 删除下拉列表中的重复项
  • 强制 APEX 按舍入值过滤

  • 注:使用舍入值创建 View 并在报告定义中使用它不是一种可行的方法,因为我们的报告包含自定义导出功能,允许用户以完全精度导出数据。

    更新
    报表的 SQL 查询非常简单:
    SELECT 
      pk,
      value,
      value AS original_value
    FROM round_test 
    

    该行为在 APEX 4.2(我们当前使用的)和 APEX 5.0(我在 http://apex.oracle.com 中使用以创建示例)中是相同的。

    最佳答案

    要消除值列表过滤器上的重复项:

    首先,您需要在 Application -> Shared Components -> Other Components -> List of Values 上创建 LOV

    使用这个 sql 查询:

    select distinct to_char(value,'999.9') d, round(value) r 
    FROM round_test  order by 1 asc
    

    然后在报告属性上编辑包含“值”值的列,并在“值列表”部分中指定“列过滤器类型”:使用命名值列表过滤精确匹配,然后在“命名值列表”上选择您之前创建的那个。

    按舍入值过滤:

    创建报告,而不是像您一样应用格式掩码(尽管在 View 上应用了格式,但仍保持实际值)在查询上设置值的格式,如下所示:
    SELECT 
      pk,
      to_char(value,'999.9') value,
      value AS original_value_
    FROM round_test 
    

    我认为这将满足您的需求。

    Here's a working example

    关于oracle - 如何在 Oracle APEX 中正确过滤具有自定义格式的数字列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30192780/

    相关文章:

    java - java.sql.Timestamp 时区特定吗?

    oracle - 具有 oracle View 的 Entity Framework

    oracle - 在 Oracle Apex (v21.1) 中检索用户密码

    sql - 顶尖。在 htp.prn 中调用 proc?

    oracle-apex - Oracle APEX 应用程序导入弄乱了页面插件显示点

    oracle - 从过程 PLSQL 中检索用户定义的记录

    mysql - 我正在努力在一个简单的查询中输出正确的 SQL 代码

    java - 将 java 对象存储为 clob 并检索

    sql - 如何包含在某一天没有任何意义的值 (APEX)

    report - APEX动态定义默认文件名?