oracle 行列转换

本文详细介绍了如何使用Oracle的wm_concat函数进行行转列操作,并通过正则表达式实现字段拆分。包括创建表、插入数据、使用wm_concat函数进行行转列、使用正则表达式进行字段拆分等步骤,旨在提高SQL处理数据的灵活性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

wmsys.wm_concat功能来行转列
create table idtable (id number,name varchar2(30));

insert into idtable values(10,'ab');
insert into idtable values(10,'bc');
insert into idtable values(10,'cd');
insert into idtable values(20,'hi');
insert into idtable values(20,'ij');
insert into idtable values(20,'mn');
insert into idtable values(30,'ZA');
insert into idtable values(30,'ZB');
insert into idtable values(30,'ZC');

select * from idtable
--按同一个ID,把行内容转换为列内容
select id,wmsys.wm_concat(name) name from idtable group by id;
--每行ID都把相同ID的行内容转换为列,然后根据ID的排序进行内容叠加.
select id,wmsys.wm_concat(name) over (order by id) name from idtable
--按照ID,name进行排名,每一行内容都汇总前一行的内容(内容叠加)
select id,wmsys.wm_concat(name) over (order by id,name) name from idtable;
--每行ID都把条件相同ID的行内容转换为列内容
select id,wmsys.wm_concat(name) over (partition by id) name from idtable;

利用正则表达式实现字段拆分(列转行)

一、数据准备
SQL> drop table temp;
SQL> create table temp (col1 varchar2(3), col2 varchar2(200));
SQL> insert into temp values('A','a,aa,aaa');
SQL> insert into temp values('B','b,bb,bbb');
SQL> select * from temp;
COL1 COL2
-------  -----------------
A        a,aa,aaa
B        b,bb,bbb

二、实现目的
COL1 COL2
-------  -----------------
A        a
A        aa
A        aaa
B        b
B        bb
B        bbb

三、实现方法
Select col1, Regexp_Substr(col2, '[^,]+', 1, n) col2
  From temp, (Select Rownum n From dual Connect By Rownum < 100)
Where n <= length(Regexp_Replace(col2, '[^,]', Null)) + 1
Order By 1, 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值