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 一个数字,然后在交互式网格的列属性中处理该数字的格式设置。这样您就可以让显示组件处理如何显示数据,而让数据组件处理要获取的数据。
在我的 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 一个数字,然后在交互式网格的列属性中处理该数字的格式设置。这样您就可以让显示组件处理如何显示数据,而让数据组件处理要获取的数据。