WMSYS.WM_CONCAT 函数的用法

 我们通过 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

 现在这个效果和不拆一样,不过如果有另外多个字段,就会有效果的哦

 

最后,希望开发的童鞋们可以用的上哈,提高开发效率

你可能感兴趣的:(oracle,WM_CONCAT函数,行转列效果)