合并Oracle多行为单行(oracle多行并一行)

Oracle中,将多行数据合并为单行输出,主要使用listagg函数来实现,listagg函数是Oracle 11g版本中新增的函数,可以将一组数据合并成单行输出,使得sql代码更简单、更清晰。

listagg的架构如下:

listagg([DISTINCT] expression [SEPARATOR ‘separator_string’]) WITHIN GROUP (ORDER BY expression_list) OVER (PARTITION BY expression_list)

listagg函数可以接受一个或多个参数,其中DISTINCT参数表示是否去重,SEPARATOR参数表示分隔符,WITHIN GROUP ORDER BY部分为排序,PARTITION BY参数可以根据指定字段拆分数据,每个组内执行listagg函数。

使用listagg函数需要根据需要完成返回值以及参数,下面以一个实例完成对雇员信息表中的工作职责进行拆解并合并成单行输出,其sql代码如下:

Select EmpNum,LISTAGG(MFG_DESC,’,’) WITHIN GROUP(ORDER BY MFG_DESC) Job Responsibility from WareHouse group by EmpNum;

本sql语句的构造,listagg函数接受了两个参数,第一个参数表示查询返回值,第二个参数表示分割字符为英文逗号“,”,排序用字段MFG_DESC。此外,以WareHouse表为查询范围,GROUP BY EmpNum分组,每个分组里面执行listagg函数。使用listagg函数将结果成功集合,最终返回一行数据,包括员工编号以及合并后的工作职责。

总结而言,listagg函数是Oracle 11g版本中新增的函数,用于将多行合并为单行,使用listagg函数需要根据需要完成返回值以及参数的设定,可以实现拆解以及合并的效果,使得sql代码更加简洁清晰。


数据运维技术 » 合并Oracle多行为单行(oracle多行并一行)