【问题标题】:Oracle SQL Subtract columns with case condition in Apex IG在 Apex IG 中使用案例条件的 Oracle SQL 减去列
【发布时间】:2021-08-14 21:10:48
【问题描述】:

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

默认情况下,两者在 DB 中都是浮点数,但需要用逗号分隔,因此使用 to_char。

第一列是简单的,第二列是通过大小写得出的。

现在我需要减去这 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, 
CURRENT_KPI-NEW_KPI RESULT 
from KPI_DATA;

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

如何编写查询以减去 CURRENT_KPI 和 NEW_KPI 的结果

甲骨文 12c 顶点 20.2

【问题讨论】:

    标签: sql plsql oracle-apex


    【解决方案1】:

    您可能想要复制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;
    

    不过,作为一项规则,我强烈建议您的查询返回一个数字,并在交互式网格的列属性中处理该数字的格式。这样一来,您就让显示组件处理如何显示数据,而数据组件处理要获取的数据。

    【讨论】:

      【解决方案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;
      

      【讨论】:

      • 这可行,但还有一个问题。结果也需要以逗号分隔的格式。那我怎么得到。因为您共享的此查询提供了无效号码。如果我这样写:选择 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 -然后 KPI_2 否则 KPI_3 以 KPI_DATA 的 RESULT 结束; -- 这里的结果列给出了浮点格式的数字。我如何将结果也转换为逗号分隔?
      • 尝试第二个查询
      • 您的第二个查询似乎混合使用了 T-SQL(声明变量并使用 + 运算符进行字符串连接)和 Oracle SQL(使用 to_char 函数)。跨度>
      • 是的,你是对的,我混合了两个系统。我已经修改过了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多