oracle行转列(连接字符串函数)

方法一:wmsys.wm_concat(column)      

介绍:其函数在Oracle 10g推出,在10g版本中,返回字符串类型,在11g版本中返回clob类型。括号里面的参数是列,而且可以是多个列的集合,也就是说在括号里面可以自 由地用‘||’合并字符串。如下面的例子: Select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum   from shopping   group by u_id

方法二:listagg (column,[,]) within group (order by ) [over (partition by  )]           

介绍:其函数在Oracle 11g 版本中推出,对分组后的数据按照一定的排序进行字符串连接。其中,“[,]”表示字符串连接的分隔符,如果选择使用[over (partition by )]则会使其变成分析函数;

方法三:sys_connect_by_path(column,<分隔符>)          

介绍:其函数在Oracle 9i 版本中推出,用来合并链路的字符串。注意的是其一定要和connect by子句合用!

第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符。

以上内容转自:http://blog.sina.com.cn/s/blog_a637e97e01014pqo.html

使用注意:

SELECT c.gysid, listagg(c.wzlbid,',') within GROUP (ORDER BY c.wzlbid)   FROM  wzgl_gys_zrwmfw c GROUP BY gysid  

这几个方法都可以实现行转列,达到想要的效果。

但当数据量比较大时却报ORA-01489:字符串连接的结果过长。

此时个人的解决办法,只能转到程序代码中去处理。

猜你喜欢

转载自solomon2012.iteye.com/blog/2222429