我们通过 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
现在这个效果和不拆一样,不过如果有另外多个字段,就会有效果的哦
最后,希望开发的童鞋们可以用的上哈,提高开发效率