You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL如何依据另一列的值拼接同列的多个查询结果?

Oracle SQL指定条件字段拼接查询方案

方案1:LISTAGG函数(Oracle 11gR2及以上版本推荐)

LISTAGG是Oracle官方提供的字符串聚合函数,性能稳定、语法清晰,适合绝大多数场景:

SELECT LISTAGG(B, ';') WITHIN GROUP (ORDER BY NULL) AS result
FROM 你的表名
WHERE A = 1;

说明:WITHIN GROUP后的ORDER BY子句用于指定拼接时的字段顺序,如果你需要按照特定规则排序(如B字段的字典序、表内原始插入顺序等),可将NULL替换为对应排序规则,例如ORDER BY B即可按B字段字母顺序拼接。

方案2:XMLAGG函数(拼接结果超长场景推荐)

如果拼接后的总长度超过4000字节,LISTAGG会抛出长度溢出错误,此时可以使用支持CLOB类型输出的XMLAGG方案:

SELECT RTRIM(XMLAGG(XMLELEMENT(e, B, ';').EXTRACT('//text()') ORDER BY NULL).GETCLOBVAL(), ';') AS result
FROM 你的表名
WHERE A = 1;

方案3:WM_CONCAT函数(低版本兼容方案,不推荐生产使用)

Oracle 11gR2之前的版本没有公开的LISTAGG函数,可以使用未官方公开的WM_CONCAT函数实现,默认分隔符为逗号,需要手动替换为分号:

SELECT REPLACE(WM_CONCAT(B), ',', ';') AS result
FROM 你的表名
WHERE A = 1;

注意:WM_CONCAT属于Oracle未公开的内部函数,官方不承诺版本兼容性,生产环境尽量优先使用前两种方案。


内容的提问来源于stack exchange,提问作者Jyothsna M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:06:03