Oracle拼接同一个字段多行的值
本文引用自- https://www.cnblogs.com/qianyuliang/p/6649983.html
https://blog.csdn.net/defonds/article/details/80455816
方法一:vm_concat() 函数
oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并
如:
--------------------------------
--------------------------------
基本语法:listagg(xxx,xxx) within group( order by xxx)。
可以配合 group by进行聚合查询,也可以配合 partition by进行聚合查询。
直接上例子。
test_user表记录如下:

test_record 表记录如下:

期望结果:
id name agg_values
111 aaa 1,3
222 bbb 1,2
333 ccc 1,3
配合 group by 查询语句:
select u.id, u.name, listagg(r.value, ',') within group (order by r.value) as agg_values
from test_user u left outer join test_record r on u.id = r.id
where r.tag in ('start', 'end')
group by u.id, u.name;
1
2
3
4
查询结果:
配合 partition by查询语句:
select distinct u.id, u.name, listagg(r.value, ',') within group (order by r.value)
over (partition by u.id ) as agg_values
from test_user u left outer join test_record r on u.id = r.id
where r.tag in ('start', 'end');
1
2
3
4
查询结果:
看来二者都能达成同样的目标。
二者相似之处:
都能实现聚合查询同样的结果
都需要 order by 对 listagg 的对象进行排序。within group 可以对聚合后的单元内 (如上例中的 1,3) 元素进行排序,order by的字段任意,并不仅限于要进行聚合操作的字段
二者不同:
group by 查询结果列必须出现在 group by 后面,不然会有 ORA-00979: not a group by expression 错误
partition by 查出的结果集是重复的 (重复数视符合条件记录数而定),需要使用 distinct 进行显式去重
对于查询结果非常复杂的业务场景,个人感觉使用 partition by 会更灵活一些;group by 由于其查询结果列必须出现在 group by 条件里边而显得有些臃肿,不够优雅。
Oracle拼接同一个字段多行的值的更多相关文章
- 大数据学习day28-----hive03------1. null值处理,子串,拼接,类型转换 2.行转列,列转行 3. 窗口函数(over,lead,lag等函数) 4.rank(行号函数)5. json解析函数 6.jdbc连接hive,企业级调优
1. null值处理,子串,拼接,类型转换 (1) 空字段赋值(null值处理) 当表中的某个字段为null时,比如奖金,当你要统计一个人的总工资时,字段为null的值就无法处理,这个时候就可以使用N ...
- 使用mysql 命令行,增加 ,删除 字段 并 设置默认值 及 非空
使用mysql 命令行,增加 ,删除 字段 并 设置默认值 及 非空 添加 alter table table_name add field_name field_type; 添加,并设置默认值,及非 ...
- oracle数据库根据不同条件给同一字段修改相应的值:
oracle数据库根据不同条件给同一字段修改相应的值: 例如:根据职务调整雇员的工资,如果职务为“SALESMAN”或者“ANALYST”工资上调100元,如果职务为“MANAGER”工资上调200元 ...
- Oracle查询所有字段另加两个拼接字段的操作
Oracle查询所有字段,再加两个字段拼接, select a.*,(SNO||SNAME) from TEST_STUDENT a; 同理,查询所有字段,其中两个字段求和:(SNO和SAGE都是NU ...
- MYSQL实现列拼接,即同一个字段,多条记录拼接成一条
一.首先,新建三张表 DROP TABLE IF EXISTS `article`; CREATE TABLE `article` ( `id` ) unsigned NOT NULL AUTO_IN ...
- 在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?
在高并发.高负载的情况下,如何给表添加字段并设置DEFAULT值? 在Oracle 12c之前,当Oracle表数据量上亿时,对表执行“ALTER TABLE XXX ADD COLUMN_XX VA ...
- oracle删除表字段和oracle表增加字段
这篇文章主要介绍了oracle表增加字段.删除表字段修改表字段的使用方法,大家参考使用吧 添加字段的语法:alter table tablename add (column datatype [d ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
- Oracle一列的多行数据拼成一行显示字符
Oracle一列的多行数据拼成一行显示字符 oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数. www.2cto.com 先介绍:WMSYS.WM_CO ...
随机推荐
- redis事务机制
目录 一.事务的实现 1.multi——开启事务 2.命令入队列 3.exec——执行事务 4.DISCARD——放弃执行 5.错误处理 二.watch命令 redis官方文档:Redis trans ...
- docker压缩导入导出
导出镜像 docker save <myimage>:<tag> | gzip > <myimage>_<tag>.tar.gz 导入镜像 gun ...
- idea jsp文件中body标签内引入编辑器后提示statement expected
解决方案: 1.用标签将script包一层解决问题 2.或者在</script>后添加自闭和标签(推荐) <input/>.<img/> //等等自闭和标签
- Java8-Concurrency
import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; public class Concurrency1 { pu ...
- BZOJ 3884——欧拉降幂和广义欧拉降幂
理论部分 欧拉定理:若 $a,n$ 为正整数,且 $a,n$ 互质,则 $a^{\varphi (n)} \equiv 1(mod \ n)$. 降幂公式: $$a^b=\begin{cases}a^ ...
- P1578 奶牛浴场 有障碍点的最大子矩形
这题咕咕了很久终于写了\(QwQ\) 思路:扫? 提交:2次 错因:数据差评,第一次把矩形的长宽搞反了竟然只有一个点没有\(A\). 题解: 显然能成为答案的矩形的边界一定有障碍点或者与大矩形边界重合 ...
- Jest自动化测试
最近一直很苦恼,测试这一块的内容,一直想提升测试效率,从慕课网了解到了自动化测试jest ,准备试下下,记录一下学习笔记,方便别人使用 1 什么是 Jest? Jest是 Facebook 的一套开源 ...
- js数据类型自动转化规律
1. 原始数据遇运算符 1. +运算符 1) 如果算子两侧都是字符串,返回拼接结果: 2) 如果算子两侧不全是字符串,则根据实际情况: 如果需要字符串,就调用String(); true + &quo ...
- Python常用知识
基础模板(sys.os) http://c.biancheng.net/view/2407.html cmd中查看第三方库 eg:import aiohttp help(aiohttp) 或者dir( ...
- uname/hostname
uname 显示操作系统相关信息的命令. hostname 显示或者设置当前系统的主机名 修改hostname