WMSYS.WM_CONCAT函数的用法

WMSYS.WM_CONCAT函数的用法


wmsys.wm_concat:列转行

select wmsys.wm_concat(name) from test;

wm_concat:行转列

select wm_concat(name) from test;

我们通过 10g 所提供的 WMSYS.WM_CONCAT 函数可以完成 行转列的效果
   
    例子如下:
   
    1.准备数据:
   
    Sql代码
   
    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’);
   
    查询下试试:
   
    Sql代码
   
    select * from testtable;
   
    ID NAME
   
    10 ab
   
    10 bc
   
    10 cd
   
    20 hi
   
    20 ij
   
    20 mn
   


    2.效果
   
    2.1行转列的效果1(根据id分组)
   
    Sql代码
   
    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排序基础上转换)
   
    Sql代码
   
    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字段拆分)
   
    Sql代码
   
    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字段拆分)
   
    Sql代码
   
    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
   
    现在这个效果和不拆一样,不过如果有另外多个字段,就会有效果的哦

根据不同需求,此函数可解决两表多个条件字段的查询

例:

select distinct t.* from third_product t join (select p.prot_id, wmsys.wm_concat(p.prop_value) prop_value from product_prop p group by p.prot_id) w on w.prot_id = t.id where 1 =1  and w.prop_value like '%信封%' and w.prop_value like '%蓝色%'

猜你喜欢

转载自technicalsearch.iteye.com/blog/1697070