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 '%蓝色%'
分享到:
相关推荐
Oracle10g之后有些版本已不包含WMSYS.WM_CONCAT函数,若用到此函数, 系统会提示异常:ORA-00904: "WM_CONCAT": invalid identifier 因此需单独重建此函数,方法如下: 解压附件,在sqlplus中执行包里的owmctab....
大家用oracle数据库里面的wmsys.wm_concat函数有没有遇见过字符串缓冲区太小的情况? 针对这种情况我写了个自定义聚合函数 是clob版的。
wmsys_wm_concat函数结果拆解/wmsys_wm_concat函数结果拆解/wmsys_wm_concat函数结果拆解/wmsys_wm_concat函数结果拆解/
ORA-00904 WMSYS.WM_CONCAT标识符无效解决方案
重建WMSYS用户的WMSYS.WM_CONCAT函数的3个文件重建WMSYS用户的WMSYS.WM_CONCAT函数的3个文件
解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 在sqlplus中执行包里的owmctab.plb、owmaggrs.plb、owmaggrb.plb三个脚本即可。 简单来说,用PL/SQL执行下一下几个脚本就可以了。 特别要注意:PL/SQL登录时,要...
解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 在sqlplus中执行包里的owmctab.plb、owmaggrs.plb、owmaggrb.plb三个脚本即可。
1、下载三个文件:owmctab.plb 、 owmaggrs.plb 、 owmaggrb.plb ...如果执行结果报错,说找不到WMSYS用户,那么执行 @C:\Users\JOYTRAVEL\Desktop\WMSYS用户\owmctab.plb; 再执行owmaggrb和owmaggrs
行转列函数,对于学习sql查询的朋友们,可能会遇到这样的要求,此文档中做了详细记载,希望可以帮到你!
包含owmctab.plb 、 owmaggrs.plb 、 owmaggrb.plb 三个文件,可解决OracleXE中没有WM_CONCAT函数的问题;解决方案如下:1、下载三个文件:owmctab.plb 、 owmaggrs.plb 、 owmaggrb.plb 2、用sqlplus登录:...
* 自定义聚合函数 wmsys.wm_concat 替换办法 * 超大字符串拼接,单个字符串4000、分隔符100,可拼出超4000的超长字符串 * 可自定义指定分隔符separator * 可自定义指定排序字段sequence,对于数字或日期类型的...
解决方案:使用Oracle自带的函数 WMSYS.WM_CONCAT,进行拼接。 函数限制:它的输出不能超过4000个字节。 为了不让SQL出错,又可以满足业务的需求,超过4000个字节的部分,使用“。。。” 实现SQL如下: 代码如下: ...
一、Oracle 10G以前使用WMSYS.WM_CONCAT: wmsys.wm_concat将字段的值用”,”来隔开。 select id,wm_concat(name) from tab_name group by id; 二、使用sys_connect_by_path sys_connect_by_path(字段名, 2个字段...
Oracle 重建WMSYS用户的WMSYS.WM_CONCAT函数
Oracle 12c 创建建WMSYS用户的WMSYS.WM_CONCAT函数 解决12c不支持WM_CONCAT函数问题 解压到E:\WMSYS\目录下然后在cmd里执行下边的命令 sqlplus / as sysdba @E:\WMSYS\owmctab.plb; @E:\WMSYS\owmaggrs.plb; @...
Oracle 11g 重建WMSYS用户的WMSYS.WM_CONCAT函数,WMSYS用户