Oracle分组合并数据的方法总结 wm_concat() 和 listagg()
一、简介
在实际项目中进行一些统计数据时,难免会遇到需要合并数据在列表进行展示的需求。本文将讲解一下oracle 11g合并数据的两种方法 (wm_concat() 和 listagg())。示例:
--with as 相当于一张临时表(一次分析,多次使用)
with temp as(select 'male' as sex, 'zhangsan' as stu_namefrom dualunionselect 'male' as sex, 'lisi' as stu_namefrom dualunionselect 'female' as sex, 'xiaohong' as stu_namefrom dualunionselect 'female' as sex, 'xiaozhang' as stu_namefrom dualunionselect 'male' as sex, 'zhaoliu' as stu_namefrom dual)select t.* from temp t;
在没有合并数据之前,数据查询出来可能有一些字段重复,如下图:
下面将性别相同的合并起来进行展示。
二、第一种方法: wm_concat()
--with as 相当于一张临时表(一次分析,多次使用)
with temp as(select 'male' as sex, 'zhangsan' as stu_namefrom dualunionselect 'male' as sex, 'lisi' as stu_namefrom dualunionselect 'female' as sex, 'xiaohong' as stu_namefrom dualunionselect 'female' as sex, 'xiaozhang' as stu_namefrom dualunionselect 'male' as sex, 'zhaoliu' as stu_namefrom dual)--第一种方法: 使用 wm_concat()方法进行合并,默认以逗号分隔
select t.sex as sex, wm_concat(t.stu_name) as stu_namefrom temp tgroup by t.sex;
查询结果:
如果想替换分隔的字符:
--with as 相当于一张临时表(一次分析,多次使用)
with temp as(select 'male' as sex, 'zhangsan' as stu_namefrom dualunionselect 'male' as sex, 'lisi' as stu_namefrom dualunionselect 'female' as sex, 'xiaohong' as stu_namefrom dualunionselect 'female' as sex, 'xiaozhang' as stu_namefrom dualunionselect 'male' as sex, 'zhaoliu' as stu_namefrom dual)--如果不想使用逗号分隔,可以替换成其他字符
select t.sex as sex, replace(wm_concat(t.stu_name), ',', '|') as stu_namefrom temp tgroup by t.sex;
查询结果:
三、第二种方法: listagg()
--with as 相当于一张临时表(一次分析,多次使用)
with temp as(select 'male' as sex, 'zhangsan' as stu_namefrom dualunionselect 'male' as sex, 'lisi' as stu_namefrom dualunionselect 'female' as sex, 'xiaohong' as stu_namefrom dualunionselect 'female' as sex, 'xiaozhang' as stu_namefrom dualunionselect 'male' as sex, 'zhaoliu' as stu_namefrom dual)--第二种方法: 使用listagg()方法,可以指定分隔的字符
select t.sex as sex,listagg(t.stu_name,',') within group(order by t.stu_name) as stu_namefrom temp tgroup by t.sex;
注意: 需要加上within group(order by ...)
查询结果:
如果想用别的分隔字符,直接指定即可:
--with as 相当于一张临时表(一次分析,多次使用)
with temp as(select 'male' as sex, 'zhangsan' as stu_namefrom dualunionselect 'male' as sex, 'lisi' as stu_namefrom dualunionselect 'female' as sex, 'xiaohong' as stu_namefrom dualunionselect 'female' as sex, 'xiaozhang' as stu_namefrom dualunionselect 'male' as sex, 'zhaoliu' as stu_namefrom dual)--如果需要替换分隔字符,直接指定其他字符即可
select t.sex as sex,listagg(t.stu_name,'|') within group(order by t.stu_name) as stu_namefrom temp tgroup by t.sex;
查询结果:
四、总结
以上是关于oracle 合并数据的两种方法,本文是作者在实际项目中遇到这样的需求进行的一些在总结和方法,仅供大家学习参考,共同学习共同进步。
Oracle分组合并数据的方法总结 wm_concat() 和 listagg()相关推荐
- oracle进行列合并,oracle列合并的实现方法
很多场合我们都会用到oracle的列合并,oracle提供了如下一些方法用来实现列合并: 一.Oracle 10G以前使用WMSYS.WM_CONCAT: wmsys.wm_concat将字段的值用& ...
- oracle怎么将一列挪到另一列,详细讲解Oracle数据库的数据迁移方法
<详细讲解Oracle数据库的数据迁移方法>由会员分享,可在线阅读,更多相关<详细讲解Oracle数据库的数据迁移方法(4页珍藏版)>请在人人文库网上搜索. 1.详细讲解 Or ...
- Oracle数据库迁移测试数据,Oracle数据库的数据迁移方法
Oracle数据库的数据迁移方法 发表于:2008-04-14来源:作者:点击数: 随着数据库管理系统和操作系统平台的更新换代的速度的加快,数据库管理员经常需要在两个不同的数据库之间或在两种不同的系统 ...
- oracle全表扫过程讲解,CSS_浅谈存取Oracle当中扫描数据的方法,1) 全表扫描(Full Table Scans, FTS) - phpStudy...
浅谈存取Oracle当中扫描数据的方法 1) 全表扫描(Full Table Scans, FTS) 为实现全表扫描,Oracle读取表中所有的行,并检查每一行是否满足语句的WHERE限制条件一个多块 ...
- ORACLE使用copy方式存储迁移,详细讲解Oracle数据库的数据迁移方法
添加所需的表空间和用户到目标数据库中:安装所需的SQL*Net2或者Net8软件,并配置用于连接数据库的别名. 在DOS命令提示符下设置oracle_sid=Oracle7_sid. 以Interna ...
- 【转】Oracle当中扫描数据的方法
本文将对oracle当中扫描数据的存取方法进行介绍. 1) 全表扫描(Full Table Scans, FTS) 为实现全表扫描,Oracle读取表中所有的行,并检查每一行是否满足语句的WHERE限 ...
- oracle 删除后恢复,Oracle快速恢复误删数据的方法
日常工作中,我们经常会出现误删Oracle数据的情况,当delete和drop(未加purge)表时,我们可以通过如下进行快速恢复: (1) delete 误删数据时: 我们可以通过构造一致性读的方式 ...
- Oracle中误删数据找回方法
快一个月没写东西了,最近确实有点忙.偶尔一次加班头有点晕居然被我误删了数据,还好只是测试数据,但是也要恢复啊,不然之前的测试不就白费了吗,哈哈.然后就去找了一些相关的恢复误操作的方法,在下面记录下来, ...
- oracle数据库数据合并,Oracle合并数据
本篇文章帮大家学习Oracle合并数据,包含了Oracle合并数据使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中将学习如何使用Oracle MERGE语句来执 ...
- 删除oracle中的一列数据,Oracle删除表数据
本篇文章帮大家学习Oracle删除表数据,包含了Oracle删除表数据使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中将学习如何使用Oracle DELETE语 ...
最新文章
- 2021年大数据Spark(三十五):SparkStreaming数据抽象 DStream
- mysql插入数据die_吴裕雄 10-MySQL插入数据
- Could not find destination factory for transport解决方法
- java pl0 四元式,【编译原理】c++实现自下而上语法分析及中间代码(四元式)生成...
- vue计算属性:computed示例
- java在己有的类创子类怎么创_使用Java创建自己的异常子类
- JSR 365更新:深入CDI 2.0
- server2003 IIS 错误 解决
- python三方库之BeautifuSoup
- leetcode —— 区间加法
- 搞笑证件生成php源码,搞笑证件生成器下载
- 端口号及对应的服务汇总 (适用于Linux/Windows系统)
- 初学python之路-day11
- c语言调用aida64温度,关于aida64软件cpu温度的问题
- 【线性代数之二】矩阵与行列式
- CentOS 7安装WRF,SMOKE,CMAQ
- 获取高德POI(关键词搜索法 多边形搜索法 周边搜索法)综合运用 2022新版高德poi下载
- POI java.lang.NoSuchMethodError: org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont.addNewFa
- mac怎么打开rar文件
- 数字逻辑 课程设计 多功能电子钟 Quartus II
热门文章
- java 包装类详解_解析包装类
- 容器技术Docker K8s 32 容器服务ACK基础与进阶-弹性伸缩
- AWS SageMaker 基于Random Cut Forest 的异常值检测 随机森林
- 实操:SparrowRecsys的首次运行
- mybatis update不生效_08. mybatis一级缓存和二级缓存
- 本地Git仓库关联Github项目
- 2018_09_25_参加医学人工智能大会的个人思考
- 【2018 SWERC - C 】Crosswords【字典树、暴力搜索】
- 每日一题/004/矩阵/矩阵问题转化为线性方程组问题
- ES的curl常用命令