oracle 结果集 拼接 LISTAGG

    SELECT 
                    p.id,
                    LISTAGG ( wp.fname, '->' ) WITHIN GROUP ( ORDER BY w.forder) as fname
            FROM yg_bs_process p 
                    LEFT JOIN yg_bs_process_workstep w ON p.id = w.fparentid
                    LEFT JOIN yg_bs_workstep wp ON w.fworkstep=wp.id
                    where p.status!=1 and w.status!=1 and wp.status!=1
                    GROUP BY p.id

### Oracle SQL 中拼接查询结果Oracle 数据库中,有多种方式可以将一的查询结果拼接成单个字符串。以下是几种常见的方法: #### 方法一:使用 `LISTAGG` 函数 `LISTAGG` 是一种非常方便的方式来进行字符串聚合操作。 ```sql SELECT LISTAGG(column_name, ',') WITHIN GROUP (ORDER BY column_name) AS concatenated_result FROM table_name; ``` 此函数会按照指定顺序连接同一组内的多行数据,并以逗号分隔[^1]。 #### 方法二:利用 `SYS_CONNECT_BY_PATH` 和 `ROW_NUMBER()` Over 分析函数组合 这种方法适用于较旧版本不支持 `LISTAGG` 的情况。 ```sql WITH numbered_rows AS ( SELECT column_name, ROW_NUMBER() OVER () AS rn FROM table_name ) SEARCH DEPTH FIRST BY rn SET order_id SELECT MAX(SYS_CONNECT_BY_PATH(column_name, ',')) KEEP(DENSE_RANK LAST ORDER BY rn) AS concatenated_result FROM numbered_rows CONNECT BY PRIOR rn = rn - 1; ``` 这段代码先给每一行编号再通过层次化查询来构建路径完成最终的串连工作[^2]。 #### 方法三:基于 `WM_CONCAT` 或者自定义聚函数 对于某些特定场景下的需求也可以考虑采用内置但已过时的 `WM_CONCAT` 函数或是创建自己的聚函数实现相同效果。 ```sql -- 使用 WM_CONCAT 进行简单拼接(注意该功能已被官方弃用) SELECT REPLACE(WM_CONCAT(column_name), ',', '*****') AS customized_delimiter_result FROM table_name; -- 自定义 PL/SQL 聚函数示例省略... ``` 需要注意的是,由于性能原因以及维护性考量,在现代应用开发实践中推荐优先选用 `LISTAGG` 方案除非确实存在兼容性障碍][^[^34]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值