listagg() :   Oracle的列转行函数(1oracle11.2 以上版本.)

语法: 

listagg(id, ',') within group(order by serno)

listagg(列名,' 分割符号') within group(order by 列值被拼接的顺序)

1.使用条件查询 查询部门为20的员工列

oracle中 listagg() WITHIN GROUP () 行转列函数的使用

 

 

  2.使用  listagg() WITHIN GROUP ()  将多行合并成一行(比较常用)

oracle中 listagg() WITHIN GROUP () 行转列函数的使用

 

 3. 使用 listagg() within GROUP () over  将多行记录在一行显示(没有遇到过这种使用场景)

oracle中 listagg() WITHIN GROUP () 行转列函数的使用

 

 二、同 wm_concat() 函数的区别:

使用 wm_concat 函数,记得加上to_char. 不然会展现成 CLOB 字段.

个人建议: 11g 版本后使用 listagg 函数. 之前版本使用 wm_concat 函数.

三、group by和partition by 的区别

group by 后的列必须是查询的分组全部列.

partition by 查出的结果集是重复的,需要使用 distinct 进行显式去重.

对于查询结果非常复杂的业务场景,个人感觉使用 PARTITION BY 会更灵活一些;GROUP BY 由于其查询结果列必须出现在 GROUP BY 条件里边而显得有些臃肿,不够优雅。partition by 可以理解为以什么来分区.

 

LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX),

总结:LISTAGG()把它当作SUM()函数来使用就可以了。

 

相关文章: