第三个网格中 2 个交互式网格列的 Oracle Apex 总和

Posted

技术标签:

【中文标题】第三个网格中 2 个交互式网格列的 Oracle Apex 总和【英文标题】:Oracle Apex Sum of 2 interactive grid columns in third grid 【发布时间】:2021-06-03 07:13:55 【问题描述】:

我的 Apex 应用程序中有 3 个交互式网格。 这三个的源表都是一样的,只是标志不同。

第一个网格:

    select kpi_a_pk, dept_name, to_char(kpi_a_1,'999,999,999,999'),to_char(kpi_a_2,'999,999,999,999'),to_char(kpi_a_3,'999,999,999,999') 
FROM KPI where dept_name = 'A'

列是数字,但需要以逗号分隔。在进程中,我使用 to_number 转换它们以保存它们。

第二格:

select kpi_a_pk, dept_name, to_char(kpi_a_1,'999,999,999,999'),to_char(kpi_a_2,'999,999,999,999'),to_char(kpi_a_3,'999,999,999,999') 
from KPI where dept_name = 'B'

第三个网格需要是 A 列和 B 列的总和:

select kpi_a_pk, dept_name, to_char(kpi_a_1,'999,999,999,999'),to_char(kpi_a_2,'999,999,999,999'),to_char(kpi_a_3,'999,999,999,999') 
from KPI where dept_name = 'C'

所以它的预期查询将具有如下逻辑:

KPI_A_1 =  case when dept_name = 'A' then kpi_a_1
+case when dept_name = 'B' then kpi_a_1

但是当我尝试在查询中编写类似这样的内容时,它什么也没有返回。我需要转换为数字进行计算。总结,然后再次使用 to char 分隔逗号。

select kpi_a_pk, dept_name, 
case when dept_name = 'A' then to_char(kpi_a_1,'999,999,999,999') else null end +
case when dept_name = 'B' then to_char(kpi_a_1,'999,999,999,999') else null end
,to_char(kpi_a_2,'999,999,999,999'),to_char(kpi_a_3,'999,999,999,999') 
from KPI where dept_name = 'C'

所以如果 A 部门的网格:

B 部门的网格:

那么 C 部门的预期 Grid 应该是:

如何修改第三个网格查询以逐个单元格获取添加的值? 在我看来,不应该需要 DA。 我尝试修改查询,但没有返回任何内容。

【问题讨论】:

【参考方案1】:

我没有遵循你的逻辑;你为什么TO_CHAR这些数字?您不想使用格式掩码来正确显示它们吗?

至于您在不显示总和的第三个网格中遇到的问题:

不要对字符串求和,因为那是你正在做的。 TO_CHAR(kpi_a_1, ...) 是一个字符串。这就好像你想知道av$#5 + #$fs 的结果。对数字求和,而不是字符串

但是,如果 Oracle 设法将这些值隐式转换为数字,它就会这样做(并且没有引发错误)。但是,这可能会困扰您:

case when dept_name = 'A' then to_char(kpi_a_1,'999,999,999,999') else null end
                                                                       ----

如果 dept_name 不是 'A',则添加 NULL。将NULL 添加到任何结果都会导致null

SQL> select 1 + null as result from dual;

    RESULT
----------


SQL>

也许你更愿意使用else 0

【讨论】:

如果用户希望以逗号分隔输入数字,则格式在这里不起作用,因此使用 to_char。即使我删除 to_char 并添加简单的数字,它也不会返回任何东西。我在这里做错了什么?当 dept_name = 'A' kpi_a_1 else 0 end + case when dept_name = 'B' then kpi_a_1 else 0 end as 结果 好的,我使用 with 子句将 dept A 和 B 值存储在子查询中,然后用它来计算 C 并且它起作用了。不知道为什么案例不起作用。 即使我使用了 0 而不是 null 它也不起作用。 嗯,奇怪(从我的角度来看)。没关系,我很高兴你成功了。

以上是关于第三个网格中 2 个交互式网格列的 Oracle Apex 总和的主要内容,如果未能解决你的问题,请参考以下文章

如何使用IG方法将新记录添加到交互式网格中,然后使用$ s()api设置列的值?

如何在 oracle apex 18 中编辑交互式网格(带有复杂的 sql 查询)?

重复行 - 交互式网格 - Apex Oracle

交互式网格:仅使用不基于表的 PL/SQL 处理

Oracle APEX - 交互式网格设置

通过 PL/SQL 手动处理交互式网格并不断抛出错误