Oracle SQL 在 Apex IG 中减去具有 case 条件的列

Oracle SQL Subtract columns with case condition in Apex IG

在我的 oracle apex 交互式网格源查询中,我有 2 列。

默认情况下,两者在数据库中都是浮点数,但需要以逗号分隔表示,因此使用 to_char.

第一列很简单,第二列是根据大小写派生的。

现在我需要减去这 2 个并将结果放入第 3 个虚拟列。

当我写这样的查询时:

 select to_char(KPI_1,'999,999,999,999.99') CURRENT_KPI, 
case when dept=1 then to_char(KPI_2,'999,999,999,999.99') 
else to_char(KPI_3,'999,999,999,999.99') end as NEW_KPI, 
CURRENT_KPI-NEW_KPI RESULT 
from KPI_DATA;

所以这里我得到错误,NEW_KPI 是无效标识符,无论我是在应用程序中验证还是在 oracle 数据库中验证 运行(sql 开发人员 19)

我如何编写查询以减去 CURRENT_KPI 和 NEW_KPI

的结果

甲骨文 12c 顶点 20.2

您需要重复转换:

select 
  to_char(KPI_1,'999,999,999,999.99') CURRENT_KPI, 
  case 
    when dept=1 then to_char(KPI_2,'999,999,999,999.99') 
    else to_char(KPI_3,'999,999,999,999.99') 
  end as NEW_KPI, 
  KPI_1 - 
  case
    when dept=1 then KPI_2
    else KPI_3
  end as RESULT 
from KPI_DATA;

为了快速,您可以这样做:

select 
  to_char(KPI_1,'999,999,999,999.99') CURRENT_KPI || ';' || 
  case 
    when dept=1 then to_char(KPI_2,'999,999,999,999.99') 
    else to_char(KPI_3,'999,999,999,999.99') 
  end as NEW_KPI || ';' ||
  to_char(
    KPI_1 -
    case 
      when dept=1 then KPI_2
      else KPI_3
    end,
    '999,999,999,999.99'
    )
from KPI_DATA;

您可能想要复制 case 语句。你想减去数字而不是字符串

select to_char(KPI_1,'999,999,999,999.99') CURRENT_KPI, 
       case when dept=1 
            then to_char(KPI_2,'999,999,999,999.99') 
            else to_char(KPI_3,'999,999,999,999.99') 
        end as NEW_KPI, 
       to_char( kpi_1 - case when dept=1 
                             then kpi_2
                             else kpi_3
                          end,
                 '999,999,999,999.99' ) result
from KPI_DATA;

不过,我强烈建议您查询 returns 一个数字,然后在交互式网格的列属性中处理该数字的格式设置。这样您就可以让显示组件处理如何显示数据,而让数据组件处理要获取的数据。