我们通过 10g 所提供的 WMSYS.WM_CONCAT 函数可以完成 行转列的效果
例子如下:
1.准备数据:
create table testtable (id number,name varchar2(30));
insert into testtable values(10,'ab');
insert into testtable values(10,'bc');
insert into testtable values(10,'cd');
insert into testtable values(20,'hi');
insert into testtable values(20,'ij');
insert into testtable values(20,'mn');
查询下试试:
select * from testtable;
ID NAME
10 ab
10 bc
10 cd
20 hi
20 ij
20 mn
2.效果
2.1行转列的效果1(根据id分组)
select id,wmsys.wm_concat(name) name from testtable group by id;
ID NAME
10 ab,bc,cd
20 hi,ij,mn
2.2行转列的效果2(在id,name排序基础上转换,这个好玩)
select id,wmsys.wm_concat(name) over (order by id,name) name from testtable;
ID NAME
10 ab
10 ab,bc
10 ab,bc,cd
20 ab,bc,cd,hi
20 ab,bc,cd,hi,ij
20 ab,bc,cd,hi,ij,mn
2.3行转列的效果3(根据id字段拆分)
select id,wmsys.wm_concat(name) over (partition by id) name from testtable;
ID NAME
10 ab,bc,cd
10 ab,bc,cd
10 ab,bc,cd
20 hi,ij,mn
20 hi,ij,mn
20 hi,ij,mn
2.4行转列的效果4(根据id,name字段拆分)
select id,wmsys.wm_concat(name) over (partition by id,name) name from testtable;
ID NAME
10 ab
10 bc
10 cd
20 hi
20 ij
20 mn
现在这个效果和不拆一样,不过如果有另外多个字段,就会有效果的哦
最后,希望开发的童鞋们可以用的上哈,提高开发效率