APEX: Column Sum



我有一个像这样的表"ZM"

ZM_ID |COSTS
10000 |200
10001 |700
10002 |100
10003 |500
10004 |100

在第18页我有项目:P18_ZM_ID:

我得到了我感兴趣的am_id值的逗号分隔列表

select listagg (ZM_ID, ',') within group (order by ZM_ID) as ZM_ID  
  from EST_ZM  
 where EST_ID = :P18_EST_ID

这将返回一个类似于"10000,10002,10004"的值到我的:P18_ZAM_ID

现在,我想要ZM_ID = :P18_ZM_ID

我试过像

select SUM(Costs)  
  from ZM 
 where ZM_ID IN (:P18_ZAM_ID)

您是否需要分两步完成此操作?这似乎更有意义(我假设你有两个不同的表zmest_zm,因为你的查询有两个不同的表名——如果真的只有一个zm表,查询可以简化)

SELECT sum(costs)
  FROM zm
 WHERE zm_id IN (SELECT zm_id
                   FROM est_zm
                  WHERE est_id = :p18_est_id)

你的代码不工作的原因是字符串1,2,3之间有巨大的差异,这是一个单一的字符串,恰好有两个逗号和一个值列表。如果在IN查询中使用逗号分隔的字符串,它将被视为单个标量值,而不是多个单独的元素。您可以接受以逗号分隔的字符串,将其解析为具有多个元素的集合,然后在查询中使用该集合。但是,您将从查询中获取数据,将其聚合为单个字符串,将其分解为集合,然后将其发送回SQL引擎,这通常比您想要的要复杂得多。

最新更新