XMLAGG 函数语法基本如图, 可以用于列转行, 列转行函数在 oracle 里有好几种方法, wm_concat 也可以做
这里介绍 wm_concat 是因为 XMLAGG 实现效果和 wm_concat 是一样的, 只是性能方面不一样, 注意: XMLAGG 最好排序一下, 性能会好点
XMLAGG 例子:
需要实现一个 table, 有一列的效果是: 用户姓名 A(账号 a), 用户姓名 B(账号 b)... 这种格式. 这就想到 oracle 的列转行函数. 可以用类似这种格式 (a || '(' || b || ')'),a 表示用户名字段, b 表示账号字段.
- <select id="listAllocatedHandlerInfo" resultType="AllocationHandlerInfoVo">
- select XMLAGG(XMLELEMENT(e, bs.user_name || '(' || bs.user_code || ')', ',').extract('//text()'))
- .getClobVal(),
- sd.step_name approveStep
- from t_flow_step fs
- left join t_user bs
- on fh.handler = bs.user_code
- left join t_step_define sd
- on fs.step_id = sd.step_id
- group by sd.step_name
- </select>
查询出来, 是用, 分隔的数据, 实现列转行显示
在这里插入图片描述
XMLAGG 常用语法:
- select t.item,
- XMLAGG(XMLELEMENT(e, t.rs_name, ',').extract('//text()'))
.getClobVal() 材料名称
from t_itm_rcv_stuff t groupby t.item;
wm_concat 会有版本不兼容问题, https://blog.csdn.net/u014427391/article/details/84867390
oracle 列转行函数还有 listagg, 也可以用 sys_connect_by_path 来做, 具体根据需求来
来源: http://www.jianshu.com/p/a2a77a81c8ee