Oracle列合并成行之wm_concat函数浅析
文章目录
- 1.LOB类型
- 2. wm_concat()函数的使用
在工作中提取数据报表时碰到了很多只有一个字段不同,其他N个字段都相同的数据,用行来显示不免觉得太过冗余,于是搜寻网络发现Oracle有个列合并成行的函数 wm_concat() 特别简单好用,所以特此记录一下。
1.LOB类型
先了解一下LOB类型:
Oarcle中的LOB类型:
在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据量非常大的业务领域(如图象、档案等)。
LOB类型分为BLOB和CLOB两种:
- BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图象、影音等)。
- CLOB,即字符型大型对象(Character Large Object),则与字符集相关,适于存贮文本型的数据(如历史档案、大部头著作等)。
2. wm_concat()函数的使用
开始新建一个表,并且插入测试数据:
create table lp_0409_0(
xuehao varchar2(20),
username varchar2(50),
kecheng varchar2(50)
);insert into lp_0409_0 values('001','老刘','语文');
insert into lp_0409_0 values('001','老刘','数学');
insert into lp_0409_0 values('001','老刘','生物');
insert into lp_0409_0 values('002','老赵','语文');
insert into lp_0409_0 values('002','老赵','英语');
insert into lp_0409_0 values('002','老赵','化学');
查询一下:
select * from lp_0409_0;
查询结果:
XUEHAO USERNAME KECHENG
001 老刘 语文
001 老刘 数学
001 老刘 生物
002 老赵 语文
002 老赵 英语
002 老赵 化学
对kecheng字段行转列:
select a.xuehao, a.username, wm_concat(a.kecheng)from lp_0409_0 agroup by (a.xuehao, a.username);
查询结果:
XUEHAO USERNAME WM_CONCAT(A.KECHENG)
001 老刘 <CLOB>
002 老赵 <CLOB>
发现查询出来的kecheng字段显示的是,没有显示想要的结果。
这里再补充2个函数:
- dbms_lob.substr():可转换clob字段为varchar2类型;
- to_char():可转换字段为char类型。
这2个函数均可以显示CLOB数据类型。
用to_char()函数显示CLOB数据类型:
select a.xuehao, a.username, to_char(wm_concat(a.kecheng))from lp_0409_0 agroup by (a.xuehao, a.username);
显示结果:
XUEHAO USERNAME TO_CHAR(WM_CONCAT(A.KECHENG))
001 老刘 语文,数学,生物
002 老赵 语文,英语,化学
用dbms_lob.substr()函数显示CLOB数据类型:
select a.xuehao, a.username, dbms_lob.substr(wm_concat(a.kecheng))from lp_0409_0 agroup by (a.xuehao, a.username);
XUEHAO USERNAME DBMS_LOB.SUBSTR(WM_CONCAT(A.KE
001 老刘 语文,数学,生物
002 老赵 语文,英语,化学
Oracle列合并成行之wm_concat函数浅析相关推荐
- oracle列,oracle列合并
在许多场合,我们会需要用到oracle列合并,oracle提供了一些方法用于把某列的多行数据合并成一行. 一.10G以前使用WMSYS.WM_CONCAT wmsys.wm_concat将字段的值用& ...
- oracle进行列合并,oracle列合并的实现方法
很多场合我们都会用到oracle的列合并,oracle提供了如下一些方法用来实现列合并: 一.Oracle 10G以前使用WMSYS.WM_CONCAT: wmsys.wm_concat将字段的值用& ...
- oracle 9i sql_id,Oracle9i增添 wm_concat函数(转)
当前位置:我的异常网» 数据库 » Oracle9i增添 wm_concat函数(转) Oracle9i增添 wm_concat函数(转) www.myexceptions.net 网友分享于:20 ...
- Oracle列转行函数listagg和wm_concat
listagg函数 其函数在Oracle 11g 版本中推出,对分组后的数据按照一定的排序进行字符串连接. //用法如下 分隔符号可以自定义 listagg (字段, ',') WITHIN GROU ...
- oracle列转行wm_concat,Oracle列转行函数wm_concat版本不兼容解决方案
业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不 ...
- oracle数据列转行排序,oracle 列转行函数 WMSYS.WM_CONCAT 排序不规则处理
业务中做报表,需要将一列列数据汇总成一行,然后汇总,如下: 需要将每个产品进行汇总,通过ichartjs进行展示,图表中需要数据的顺序是: var data = [ { name : '产品1', v ...
- 如何将Oracle中同一列的多行记录拼接成一个字符串 十一__262 | 浏览 8183 次 推荐于2016-01-25 17:34:18 最佳答案 需要用wm_concat函数来实现。
需要用wm_concat函数来实现. 如目前在emp表中查询数据如下: 要按照deptno相同的将ename以字符串形式合并,可用如下语句: 1 select deptno,wm_concat(ena ...
- oracle的wm_concat函数实现行转列
有以下数据 deptname phone username isboss 部门A 电话1 员工A 0 部门A 电话1 领导A 1 部门B 电话2 员工B 0 部门B 电话2 员工C 0 部门B 电话2 ...
- oracle vm concat指定分隔符,重写Oracle的wm_concat函数,自定义分隔符、排序
oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...
最新文章
- 闲着无聊去体验远程面试,最后竟然被录取了...
- Android常用控件之Fragment仿Android4.0设置界面
- hihocoder 1490 Tree Restoration
- python基础代码事例-学习笔记:python3,代码。小例子习作(2017)
- graduation wishes from professor Youmin Xi
- 程序员的选房神技,GitHub上的房源爬虫
- STM32 F101系列的程序怎么转化为STM F103出现编译错误!
- 【BZOJ1003】物流运输
- CV Code | 计算机视觉开源周报 20190603期
- C和汇编如何互相调用?
- 右键新建Excel时如何设定其版本即.xlsx转.xls格式
- linux指令ls -1,linux命令1--ls
- R语言︱缺失值处理之多重插补——mice包
- 上周Asp.net源码(11.5-11.10)免费下载列表
- Java算法——回溯法
- 物理-三菱镜-三菱镜效应:三菱镜效应 百科
- 怎么加入到开源社区,开心做开源
- Linux迁移home目录到根目录的操作步骤
- 以大数据重塑K12在线教育
- 配置apache以fastcgi运行php