SQL/PLSQL:行转列总结_20170822

本文详细介绍了SQL/PLSQL中行转列的多种方法,包括wm_concat()、listagg()、xmlagg() + xmlparse()以及SYS_CONNECT_BY_PATH()。通过实例展示了如何在不同场景下实现数据的行列转换,特别提到了不使用group by分组的高级用法。
摘要由CSDN通过智能技术生成


行转列之零 group by + case 太简单不细说了


例1:



with v_data as
 (select '306A' certsn, 'A' type, '10951580' value, 20080504 notbefore, 20170803 notafter    from dual  union
  select '48C6' certsn, 'B' type, 'X,2,10013856' value, 20090629 notbefore, 20180616 notafter    from dual  union
  select '48C6' certsn, 'A' type, '11260221' value, 20090629 notbefore, 20180616 notafter    from dual)
select certsn,
       case when v_data.type = 'A' then max(value) else ' ' end A,
       case when v_data.type = 'B' then max(value) else ' ' end B,
       max(notbefore) notbefore,
       max(notafter) notafter
  from v_data
 group by certsn, type;

结果



行转列之一 wm_concat()


例1:
wm_concat()行转列并且用逗号分隔, 需要分组!
select wm_concat(ename), --结果为类型clob
       to_char(wm_concat(ename)),
       dbms_lob.substr(wm_concat(ename), 4000)
  from emp
 where rownum < 5;
结果:



例2:
select c, listagg(a,'') within group(order by rownum) from test group by c;
with test as (
select 1 c,'西' a from dual union all
select 1 c,'安' a from dual union all
select 1 c,'的' a from dual union all
select 2 c,'天' a from dual union all
select 2 c,'气' a from dual unio
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值