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 '%蓝色%'