文章目录

  • 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函数浅析相关推荐

  1. oracle列,oracle列合并

    在许多场合,我们会需要用到oracle列合并,oracle提供了一些方法用于把某列的多行数据合并成一行. 一.10G以前使用WMSYS.WM_CONCAT wmsys.wm_concat将字段的值用& ...

  2. oracle进行列合并,oracle列合并的实现方法

    很多场合我们都会用到oracle的列合并,oracle提供了如下一些方法用来实现列合并: 一.Oracle 10G以前使用WMSYS.WM_CONCAT: wmsys.wm_concat将字段的值用& ...

  3. oracle 9i sql_id,Oracle9i增添 wm_concat函数(转)

    当前位置:我的异常网» 数据库 » Oracle9i增添 wm_concat函数(转) Oracle9i增添 wm_concat函数(转) www.myexceptions.net  网友分享于:20 ...

  4. Oracle列转行函数listagg和wm_concat

    listagg函数 其函数在Oracle 11g 版本中推出,对分组后的数据按照一定的排序进行字符串连接. //用法如下 分隔符号可以自定义 listagg (字段, ',') WITHIN GROU ...

  5. oracle列转行wm_concat,Oracle列转行函数wm_concat版本不兼容解决方案

    业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不 ...

  6. oracle数据列转行排序,oracle 列转行函数 WMSYS.WM_CONCAT 排序不规则处理

    业务中做报表,需要将一列列数据汇总成一行,然后汇总,如下: 需要将每个产品进行汇总,通过ichartjs进行展示,图表中需要数据的顺序是: var data = [ { name : '产品1', v ...

  7. 如何将Oracle中同一列的多行记录拼接成一个字符串 十一__262 | 浏览 8183 次 推荐于2016-01-25 17:34:18 最佳答案 需要用wm_concat函数来实现。

    需要用wm_concat函数来实现. 如目前在emp表中查询数据如下: 要按照deptno相同的将ename以字符串形式合并,可用如下语句: 1 select deptno,wm_concat(ena ...

  8. 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 ...

  9. oracle vm concat指定分隔符,重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

最新文章

  1. 闲着无聊去体验远程面试,最后竟然被录取了...
  2. Android常用控件之Fragment仿Android4.0设置界面
  3. hihocoder 1490 Tree Restoration
  4. python基础代码事例-学习笔记:python3,代码。小例子习作(2017)
  5. graduation wishes from professor Youmin Xi
  6. 程序员的选房神技,GitHub上的房源爬虫
  7. STM32 F101系列的程序怎么转化为STM F103出现编译错误!
  8. 【BZOJ1003】物流运输
  9. CV Code | 计算机视觉开源周报 20190603期
  10. C和汇编如何互相调用?
  11. 右键新建Excel时如何设定其版本即.xlsx转.xls格式
  12. linux指令ls -1,linux命令1--ls
  13. R语言︱缺失值处理之多重插补——mice包
  14. 上周Asp.net源码(11.5-11.10)免费下载列表
  15. Java算法——回溯法
  16. 物理-三菱镜-三菱镜效应:三菱镜效应 百科
  17. 怎么加入到开源社区,开心做开源
  18. Linux迁移home目录到根目录的操作步骤
  19. 以大数据重塑K12在线教育
  20. 配置apache以fastcgi运行php

热门文章

  1. DJ9-3 DMA 方式
  2. 为什么科技巨头们纷纷更换 Logo?
  3. 表格(HTML和CSS属性)
  4. NSURLSESSION使用实战教程
  5. 在debian系统下安装R以及Rstudio的经历
  6. 【从0到1搭建LoRa物联网】1、LoRa物联网的架构
  7. 声音的三要素跟声波的幅度、频率和频谱的对应关系
  8. 【安装部署】DataEase Mac 电脑本地运行 Kettle 和 Doris 报错:Mounts denied
  9. rtth之线程间的通信
  10. Qt实现主窗口和子窗口的切换