oracle中xmlagg、listagg、wm_concat用法
xmlagg、listagg、wm_concat三个函数在oracle中都可以用于列转换行。查询例子:将fileorgname字段用,分隔的数据,实现列转行sql select t.fileorgname, t.typepath3 from t_imgfileindex t一、xmlagg效果和wm_concat一样,但是性能不一样,xmlagg排序一下,性能会快一些。--语法:1. xmlagg
·
xmlagg、listagg、wm_concat三个函数在oracle中都可以用于列转换行。
查询例子:
将fileorgname字段用,分隔的数据,实现列转行
sql select t.fileorgname, t.typepath3 from t_imgfileindex t
一、xmlagg
效果和wm_concat一样,但是性能不一样,xmlagg排序一下,性能会快一些。
--语法:
1. xmlagg(xmlparse(content 合并字段 ||’,’ wellformed) order by 排序字段).getclobval()
例子:
select xmlagg(xmlparse(content t.fileorgname || ',' wellformed) order by t.typepath3)
.getclobval() as fileorgname,
t.typepath3
from t_imgfileindex t
group by t.typepath3;
--语法:
2. xmlagg(xmlelement(e, 合并字段, ',').extract('//text()')).getclobval()
例子:
select xmlagg(xmlelement(e, t.fileorgname, ',').extract('//text()'))
.getclobval() as fileorgname,
t.typepath3
from t_imgfileindex t
group by t.typepath3;
二、listagg
11g2才提供的函数,不支持distinct,拼接长度不能大于4000,函数返回为varchar2类型,最大长度为4000。当查询较慢时,建议使用listagg代替wm_concat。
--语法:
listagg( 合并字段, ',') within group (order by 排序字段 )
例子:
select listagg(t.fileorgname, ',') within group(order by t.typepath3) as fileorgname,
t.typepath3
from t_imgfileindex t
group by t.typepath3;
三、wm_concat
wm_concat依赖WMSYS 用户,不同oracle环境时可能用不了,会有版本不兼容问题,返回类型为CLOB,可用substr截取长度后to_char转化为字符类型。
--语法:
wm_concat()
例子:
select wm_concat(distinct t.fileorgname),
t.typepath3
from t_imgfileindex t;
更多推荐
已为社区贡献21条内容
所有评论(0)