温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

oracle中多列转行

发布时间:2020-08-06 22:03:57 阅读:331 作者:stotf 栏目:关系型数据库
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

方式一 通过wm_concat函数,该函数在10g可以使用,11g 中不兼容,12g中去掉了该函数, ,返回类型为varchar

             语法:wm_concat(列)

             例子:Select wm_concat(Rownum) From dual Connect By Rownum < 10;

             优点:语法简单

             缺点:字符长度不能超过4000,以逗号分隔,如果要以其他符号分割,还要替换,性能比较差


方式二:通过lisagg 返回类型为varchar             

             语法: listagg(参数,‘分隔符’) within group(order by 参数id)

             例子:Select 

                           listagg(Rownum,';') Within group(Order By Rownum Desc) 

                        From  dual   Connect By Rownum < 10;

             优点:可以排序,并且可以自定义分隔符,效率也高

             缺点:拼接字符长度不能超过4000

方式三:通过xmlagg,是解析MXL用的,也可以用作字符拼接,返回clob类型

             语法:
                      XMLAGG(XMLPARSE(CONTENT 字段 || 分隔符 WELLFORMED) ORDER BY 字段).GETCLOBVAL() 

                      或

                      XMLAGG(XMLELEMENT(e, 字符串 , 分隔符).Extract('//text()')).GETCLOBVAL()      
             例子:

                     可以使用下面两种之一:

                     Select Xmlagg(Xmlparse(Content Rownum || ',' Wellformed) Order By Rownum Desc)

                            .Getclobval()

                       From Dual

                     Connect By Rownum < 30000;      

                     Select Xmlagg(Xmlelement(e, Rownum, ',').Extract('//text()')).Getclobval()

                       From Dual

                     Connect By Rownum < 30;

             优点:对字符拼接没有长度限制

             缺点:语法比较复杂


亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:http://blog.itpub.net/31557103/viewspace-2656949/

AI

开发者交流群×