Progress OpenEdge中无需ABL的PostgreSQL string_agg等效函数查询
Progress OpenEdge 实现字符串聚合的非ABL方案
目前Progress OpenEdge原生SQL方言没有内置和PostgreSQL string_agg 完全同名的聚合函数,但可以通过以下两种无需编写ABL代码的方式实现完全一致的效果:
- 使用原生内置
LIST聚合函数
这是最推荐的方案,OpenEdge SQL原生提供的LIST函数功能和string_agg完全对齐,参数顺序为LIST(待聚合字段, 分隔符),分隔符不传默认使用逗号。
示例用法:按分组聚合员工姓名,用分号分隔SELECT dept_id, LIST(emp_name, ';') AS emp_name_list FROM employee GROUP BY dept_id;
额外支持能力:- 可搭配
DISTINCT实现去重聚合:LIST(DISTINCT emp_name, ';') - 聚合结果长度不够时,可调整数据库参数
SQL_LIST_MAX_LENGTH提升上限
- 可搭配
- 使用递归CTE拼接
若你使用的OpenEdge版本支持递归公共表表达式,也可以用标准SQL的递归逻辑逐行拼接字符串,不需要依赖内置函数,也无需编写ABL代码,适合需要自定义特殊聚合逻辑的场景。
注意:如果聚合数据量较大,更推荐使用原生
LIST函数,执行效率远高于递归CTE实现。
内容的提问来源于stack exchange,提问作者Daniel L. VanDenBosch
相关产品推荐
相关产品推荐

