【问题标题】:Oracle Apex Sum of 2 interactive grid columns in third grid第三个网格中 2 个交互式网格列的 Oracle Apex 总和
【发布时间】: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。 我尝试修改查询,但没有返回任何内容。

【问题讨论】:

    标签: sql oracle oracle-apex


    【解决方案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 它也不起作用。
    • 嗯,奇怪(从我的角度来看)。没关系,我很高兴你成功了。
    猜你喜欢
    • 2020-02-22
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多