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 ...
随机推荐
- Spring入门篇——AOP基本概念
1.什么是AOP及实现方式 什么是AOP AOP:Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要 ...
- - The superclass "javax.servlet.http.HttpServlet" was not found on the Java
网上有很多解决方法,如这种 下面是具体的解决方法:1.右击web工程->属性或Build Path->Java Build Path->Libraries-> Add Libr ...
- python3.6 创建字典三法
这里献丑给出 python 3.6 创建字典变量的三法 其一:阳春白雪法:直接声明 mydic = {"name":"徐晓冬","age" ...
- php 中秒杀
控制器层 2 //秒杀 首先要判断库存 其次高并发 然后入库 3 public function goods_do() 4 { 5 $gid=input("get.gid"); 6 ...
- 顺序表Vector
程序中会使用数据结构:例如:顺序表.链表.二叉树: 数据结构在底层中本质上只有两种:数据之间挨着和不挨着: 1.关于Vector
- java上传文件夹
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用.此控件PC全平台支持包括mac,linux系统的文件上传,文章末尾将附上控件下载与教程链接 ...
- CF796C Bank Hacking 细节
思路十分简单,答案只有 3 种可能,但是有一些细节需要额外注意一下. code: #include <bits/stdc++.h> #define N 300002 #define set ...
- CF788C The Great Mixing BFS+思维
这个模型十分巧妙啊,好题好题~ code: #include <bits/stdc++.h> #define N 3006 #define setIO(s) freopen(s" ...
- [Luogu] 区间统计Tallest Cow
https://www.luogu.org/problemnew/show/P2879 差分 | 线段树 #include <iostream> #include <cstdio&g ...
- 第2组 Alpha冲刺(4/4)
队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:了解整个游戏的流程 GitHub签入记录 接下来的计划:继续完成游戏 还剩下哪些任务:完成游戏 燃尽图 遇到的困难:没有美术比较好的 ...