欢迎光临
我们一直在努力

oracle中多列转行


方式一

通过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;

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

             缺点:语法比较复杂



赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。