Oracle列合并成行之wm_concat函数浅析

摘要:
目录1.LOB类型2.wm_concat()函数的使用在工作中提取数据报表时碰到了很多只有一个字段不同,其他N个字段都相同的数据,用行来显示不免觉得太过冗余,于是搜寻网络发现Oracle有个列合并成行的函数wm_concat()特别简单好用,所以特此记录一下。CLOB,即字符型大型对象,则与字符集相关,适于存贮文本型的数据。
目录

在工作中提取数据报表时碰到了很多只有一个字段不同,其他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 a
 group 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 a
 group 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 a
 group by (a.xuehao, a.username);
 XUEHAO	USERNAME	DBMS_LOB.SUBSTR(WM_CONCAT(A.KE
001	老刘	语文,数学,生物
002	老赵	语文,英语,化学

Oracle列合并成行之wm_concat函数浅析第1张

免责声明:文章转载自《Oracle列合并成行之wm_concat函数浅析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenWrt 路由系统上抓包Android实现透明的颜色效果(zz)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle中imp命令具体解释

oracle中imp命令具体解释 Oracle的导入有用程序(Import utility)同意从数据库提取数据,而且将数据写入操作系统文件。imp使用的基本格式:imp[username[/password[@service]]],下面例举imp经常使用用法。 1. 获取帮助 imp help=y 2. 导入一个完整数据库 imp syste...

Oracle数据库失效对象处理

近期对数据库进行巡检,发现数据库业务用户(非 SYS/Public)下存在失效对象。对失效对象进行分析,主要包括失效的视图、物化视图、函数、包、触发器等。 思考: 基于以下原因,建议对失效对象进行处理: 1、通过失效的对象,可能能够反推发现业务软件问题(业务系统功能太多,可能存在测试不充分的问题); 2、如果失效对象太多,业务又频繁调用的话,担心影响数据库...

Oracle 11g 新特性 SecureFiles 说明

一. Oracle SecureFiles 说明 1.1 现有LOB实施中的问题   在Oracle8i 中,LOB 设计是基于下列假设做出的: (1)  LOB 实例化的大小预计为几个兆字节。 (2)  LOB 通常被视为“单写多读”类型的数据。很少进行更新,所以可以为所有类型的更新(大型或小型)对整个块进行版本化。 (3)  预计很少有批处理会流式...

Oracle中TO_DATE TO_CHAR格式

TO_CHAR 是把日期或数字转换为字符串 TO_DATE 是把字符串转换为数据库中得日期类型转换函数 TO_NUMBER 将字符转化为数字TO_CHAR 使用TO_CHAR函数处理数字 TO_CHAR(number, '格式') TO_CHAR(salary,’$99,999.99’); 使用TO_CHAR函数处理日期 TO_CHAR(date,’格式...

SQL优化(Oracle)

(转)SQL优化原则一、问题的提出  在应用系统开发初期。因为开发数据库数据比較少。对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,可是假设将应用系统提交实际应用后,随着数据库中数据的添加。系统的响应速度就成为眼下系统须要解决的最基本的问题之中的一个。系统优化中一个非常重要的方面就是SQL语句的优化。对于海量数据,劣质SQL...

oracle正则表达式regexp_like的用法详解

ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR的功能相似4,REGEXP_REPLACE :与REPLACE的功能相似它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和RE...