Oracle行列互换总结

 

Oracle行列互换总结

 

1. 多行换成一行

    col1  col2            col1  col2

    a       1

    a       2     转换后   a     1,2,3

    a       3


   A. sys_connect_by_path 函数

        SELECT NAME, ltrim(MAX(sys_connect_by_path(userid, ',')), ',') userid   FROM(SELECT NAME, userid,row_number() over(PARTITION BY NAME ORDER BY userid) rn  FROM test)  START WITH rn = 1 CONNECT BY rn - 1 = PRIOR rn AND NAME = PRIOR NAME GROUP BY NAME ORDER BY NAME;


    B.wmsys.WM_CONCAT函数

       select  NAME,wmsys.WM_CONCAT(userid)  from xj_class group by  NAME;



2. 一行换多行


       col                                   col

       1,2,3       转换后               1

                                               2

                                               3

   

       select substr(subject_id,instr(subject_id,',',1,rownum)+1,
             instr(subject_id,',',1,rownum+1)-instr(subject_id,',',1,rownum)-1) subject_id,rownum
       from (select ','||subject_id||',' as subject_id
             from tea_class_subject where teacher_id=61 and class_id=16641)
       connect by rownum<length(translate(subject_id,','||subject_id,','))

 

 

注:使用行列互换函数貌似很占内存。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值