方法一: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:字符串連接的結果過長。
此時個人的解決辦法,只能轉到程序代碼中去處理。
希望,以此為鑒!