第三个网格中 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设置列的值?