oracle中的regexp_replace结合listagg组合后去重

oracle 11g的 listagg() WITHIN GROUP () 行转列函数 奇葩需求:单个病人未支付列表查询接口 一个医生开的处方单显示一条数据 处方单用逗号合并,金额累计。 用处:第三方公司合并支付。 1.使用条件查询 查询病人id为407990的未支付列表 2.使用 listagg() WITHIN GROUP () 将多行合并成一行 金额合并 这里有个问题 就是单号有重复项,然后金额是没问题的 解决方案: Oracle listagg() within g... 阅读详情

1、首先准备数据表和数据:

CREATE V_TEST
   (	GROUP_CODE VARCHAR2(20 CHAR), 
	PRODUCT_ID VARCHAR2(200 CHAR)
   )

数据:

INSERT INTO V_TEST(GROUP_CODE,PRODUCT_ID) VALUES ('2405','111111111111111');
INSERT INTO V_TEST(GROUP_CODE,PRODUCT_ID) VALUES ('2711','111111111111111');
INSERT INTO V_TEST(GROUP_CODE,PRODUCT_ID) VALUES ('2712','111111111111111');
INSERT INTO V_TEST(GROUP_CODE,PRODUCT_ID) VALUES ('2718','111111111111111');
INSERT INTO V_TEST(GROUP_CODE,PRODUCT_ID) VALUES ('2711','111111111111111');
INSERT INTO V_TEST(GROUP_CODE,PRODUCT_ID) VALUES ('2718','111111111111111');
COMMIT;

2、执行如下查询:

select regexp_replace((listagg(T.GROUP_CODE, ',') within group(order by T.PRODUCT_ID)),  '(,[[:digit:]]+)(\1)+','\1') GROUP_CODE from V_TEST t GROUP BY T.PRODUCT_ID

执行结果如下图所示:
在这里插入图片描述
3、以上的语句只能对数字去重,那么通过以下语句可以对任何以逗号隔开的字符串去重,如:

//注意:这只能对相邻的字符串去重,因此要对字符串去重,必须先通过order by排序后去重
select regexp_replace((listagg(T.GROUP_CODE, ',') within group(order by T.PRODUCT_ID)),  '([^,]+)(,\1)*(,|$)','\1\3') GROUP_CODE from V_TEST t GROUP BY T.PRODUCT_ID
//以+号分割
regexp_replace((listagg(T.item_name, '+') within group(order by T.item_name)),  '([^\+]+)(\+\1)*(\+|$)','\1\3') item_name,
//或者
to_char(rtrim(xmlagg(xmlparse(content upper(item_name) || '+' wellformed) order by item_code).getclobval() ,'+')) item_name
//如果遇到字符串过长,则可以使用如下语句
regexp_replace(rtrim(xmlagg(xmlparse(content upper(product_id) || ',' wellformed) order by product_id).getclobval() ,','),'([^,]+)(,\1)*(,|$)', '\1\3') product_id,

//如果是mybatis中使用如下语句,否则会报错
regexp_replace((listagg(product_id, ',') within group(order by product_id)),  '([^,]+)(,\1)*(,|$)','\1\3') product_id

如下图所示:
在这里插入图片描述
去重后:
在这里插入图片描述

4、正则表达式如下:
‘^’ 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
‘$’ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘/n’ 或 ‘/r’。
‘.’ 匹配除换行符之外的任何单字符。
‘?’ 匹配前面的子表达式零次或一次。
‘+’ 匹配前面的子表达式一次或多次。
‘*’ 匹配前面的子表达式零次或多次。
‘|’ 指明两项之间的一个选择。例子’^([a-z]+|[0-9]+)$‘表示所有小写字母或数字组合成的字符串。
‘( )’ 标记一个子表达式的开始和结束位置。
‘[]’ 标记一个中括号表达式。
‘{m,n}’ 一个精确地出现次数范围,m=<出现次数<=n,’{m}‘表示出现m次,’{m,}'表示至少出现m次。
/num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
各种操作符的运算优先级
/转义符
(), (?😃, (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序

MySQL根据idb文件恢复数据 恢复前提 MySQL 5.* 和 8.* 的恢复方式大同小异,最基本的区别是8.* 中,不再有表结构frm文件,所以要恢复 8.* 的数据,就必须要有完整的建表语句。 而恢复 5.* 的数据,就需要idb文件和 frm文件,当然,如果有完整的建表语句的话,不用frm文件也行。 恢复步骤 需要注意的是,以下操作需要选定数据库后执行。 5.* 恢复表结构 确定表列数 首先创建一张 与需要恢复数据的表 的名字相同的新表,如果已知原表的字段数量的话,就按照原表字段数建表,字段名和类型都不用考虑,如果不知道数量的话, 阅读详情

相关推荐

5分钟搞定Conflux钱包注册:Fluent钱包从安装到转账全流程指南

本文提供Conflux公链上Fluent钱包的完整注册和使用指南,涵盖从安装、助记词备份到CFX转账的全流程。特别强调安全操作要点,包括助记词保管和网络选择,帮助用户5分钟内快速掌握这款国产公链钱包的核心功能,确保数字资产安全。

weixin_29181861的博客 242

oracle的 listagg() 函数及数据的去重!!

1.使用条件查询 查询部门为20的员工列表 – 查询部门为20的员工列表 SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO = '20' ; 效果 2.使用 listagg() WITHIN GROUP () 将多行合并成一行(比较常用) SELECT T .DEPTNO, listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) names FROM SCOTT.EMP T

ヾ凉秋的博客 1万+

《全连接到卷积神经网络:图像识别的演变历程》

这篇文章会从传统全连接层面临的困境说起,揭示卷积神经网络(CNN)成为图像识别核心动力的原因,探究其背后蕴含的设计思想与技术创新。但是回顾历史,CNN的出现提醒我们:技术的突破往往是由对自然规律的模仿和重新构建得来的。也许,当机器真的学会“像人一样看世界”的时候,它们的“眼睛”早就超过生物视觉的限制了。例如,用5×5的核处理224×224的输入时,只要25个参数(而不是全连接那种百万级的)。* 局部性:网络的底层只需留意局部的地方(像边缘、纹理这样的地方),不用管那些全局像素之间复杂的关系。

2401_82434295的博客 672

Oracle listagg去重distinct三种方法总结

一、简介 最近在工作中,在写oracle统计查询的时候,遇到listagg聚合函数分组聚合之后出现很多重复数据的问题,于是研究了一下listagg去重的几种方法,以下通过实例讲解三种实现listagg去重的方法。 二、方法 首先还原listagg聚合之后出现重复数据的现象,打开plsql,执行如下sql: select t.department_name depname, ...

weixiaohuai的博客 6万+

Coze离线部署实战:从镜像拉取到服务启动的完整避坑指南

本文提供了一份详尽的Coze平台离线部署实战指南。针对无外网的生产环境,详细讲解了从Docker镜像拉取、打包传输到内网服务器加载的完整流程,并重点剖析了使用docker-compose启动服务时常见的配置错误与权限问题,如文件挂载缺失、网络绑定错误等,提供了经过验证的避坑解决方案,旨在帮助运维和开发人员一次性成功部署。

weixin_29310605的博客 326

YOLOv11火焰识别:从环境搭建到GUI部署的完整工程实践

目标检测是计算机视觉的核心任务之一,它通过定位和分类图像中的物体,为机器赋予“看懂”世界的能力。其原理通常基于深度学习模型,如YOLO系列,通过卷积神经网络提取特征并预测边界框与类别。这项技术的价值在于将算法能力转化为实际生产力,广泛应用于安防监控、工业质检、自动驾驶等场景。在工程实践中,环境配置的稳定性与数据质量往往决定项目成败,而模型部署的易用性直接影响最终用户体验。本文以火焰识别这一具体应用为切入点,详细解析了如何利用YOLOv11完成从零到产品化的全链路流程,其中涉及Conda虚拟环境管理、PyTo

weixin_29483277的博客 234

Oracle 系列数据库使用 listagg去重,删除重复数据的几种方法

第三种:xmlagg(xmlparse(content t.tag_level || ‘,’ wellformed) order by t.tag_level):使用 xmlagg 和 xmlparse 函数将 tag_level 字段聚合为一个用逗号分隔的字符串,并按 tag_level 排序。字符串长度更大:XMLAGG 可以处理比 LISTAGG 更大的字符串,因为生成的结果是 CLOB 类型,不受 4000 字符的限制。灵活性:支持更复杂的 XML 处理和格式化功能,适合需要复杂字符串操作的场景。

曼陀罗的博客 7904

常用元器件使用方法36:USB转串口芯片CH340X

本文介绍了CH340X芯片的使用方法

snmplink的博客 2824

listagg结果去重

最近在一个项目中用到了listagg方法,但是在组合结果中出现有重复的情况。默认的结果如下 于是我就写了一个方法对listagg的结果去重,也可以对该格式的字符串去重,方法如下 create or replace function listaggpure(targetStr varchar2,seperator varchar2:=',') return varchar2 is Rslt varchar2(32767); begin select listagg(str,seperator...

haofangkiller的专栏 5563

【论文硬核拆解】Ctx2Skill:让大模型自己跟自己玩,从上下文里「进化」出可复用技能

论文选择自然语言技能可解释性:技能是人类可读的 Markdown 文件,可以审查、编辑、调试可迁移性:即插即用,从一个模型到另一个模型无需参数访问:对闭源模型友好这比 SKILL0/SkillRL 等参数内化方法更实用,尤其是在商业 API 场景。

步子哥的博客 150

【INMP441】 MEMS麦克风,让硬件“听得见”,更要“听得清”

INMP441是一款数字MEMS麦克风,采用PDM接口输出高质量数字音频信号。相比传统模拟麦克风,它具有高度集成、抗干扰强、功耗低等优势,支持通过时钟启停实现软件控制开关。该麦克风体积小巧但功能强大,内置MEMS传感器、ADC转换器等模块,适合智能音箱、语音遥控等应用。工程师可通过ESP32等主控芯片轻松连接INMP441,利用多麦克风阵列实现波束成形等高级功能。INMP441展现了数字音频采集的先进技术,为创客和智能硬件开发者提供了优秀的音频解决方案。

深耕CV 1534

Oracle listagg去重的两种方法

一:SELECT DISTINCT        TYPE,        SUBTYPE,        LISTAGG (EN, ' | ')           WITHIN GROUP (ORDER BY EN)           OVER (PARTITION BY TYPE, SUBTYPE)           AS SKILLS   FROM (SELECT DIS...

qq_40138785的博客 8936

[Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

分类(Classification)属于有监督学习(Supervised Learning)中的一类,它是数据挖掘、机器学习和数据科学中一个重要的研究领域。分类模型类似于人类学习的方式,通过对历史数据或训练集的学习得到一个目标函数,再用该目标函数预测新数据集的未知属性。本章主要讲述分类算法基础概念,并结合决策树、KNN、SVM分类算法案例分析各类数据集,从而让读者学会使用Python分类算法分析自己的数据集,研究自己领域的知识,从而创造价值。 19.1 分类 19.1.1 分类模型 与前面讲述的聚类模型类似

杨秀璋的专栏 2万+

Oracle listagg() 中的子字符串去重 regexp_replace

文章目录1 概述2 语法2.1 regexp_replace():字符串替换2.2 listagg():先排序3 扩展3.1 Oracle 正则表达式详解:regexp_xx 1 概述 #mermaid-svg-PENYgpOJ0rvp2fh0 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-PENYgpOJ0r

鱼丸丶粗面 4036

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

oracle的LISTAGG函数 和 REGEXP_SUBSTR函数的使用

oracle 聚合函数 LISTAGG ,将多行结果合并成一行 LISTAGG(列名,’ 分割符号‘) oracle 11g 以上的版本才有的一个将指定列名的多行查询结果,用 指定的分割符号 合并成一行显示: 例如: 表原始数据: 需求:将 mb1_Transport_License_list 表中的数据,根据 transportation_license_id 数据进行分组,对...

wblearn的博客 1836

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Oracle LISTAGG排重方法

1.使用正则表达式进行排重 SELECT regexp_replace('2,2,3,4,5 ', '([^,]+)(,\1)+', '\1') AS col FROM dual查询结果: SQL> SELECT regexp_replace('2,2,3,4,5 ', '([^,]+)(,\1)+', '\1') AS col 2 FROM dual 3 ; COL

苏南生的优快云博客 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ORACLE-REGEXP_SUBSTR函数使用方法汇总

REGEXP_SUBSTR函数格式如下:REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) __srcstr:需要进行正则处理的字符串 __pattern :进行匹配的正则表达式 __position :起始位置,从第几个字符开始正则表达式匹配(默认为1) __occurrence :标识第几个匹配组,默认为1 _

KARMABASE 3141

oracle listagg() 去重

oracle : regexp_replace((listagg(OV.PNR, ',' ) within group (order by OV.PNR)), '([^,]+)(,\1)+', '\1')

L_X 1万+

oracle listagg与over,分组依据-如何将Oracle的LISTAGG函数与唯一的过滤器一起使用?...

分组依据-如何将Oracle的LISTAGG函数与唯一的过滤器一起使用?这个问题已经在这里有了答案:Oracle中的LISTAGG返回不同的值 23个答案我有一张这样的桌子:group_id name-------- ----1 David1 John1 Alan1 ...

weixin_42515063的博客 751

Oracle之字符串去重统计

Oracle之字符串去重

qq_30976013的博客 2796

oracle 字符串自身按分隔符去重

oracle 字符串自身按分隔符去重

weixin_44543121的博客 1672

oracle如何排重,Oracle LISTAGG排重方法

1.使用正则表达式进行排重SELECT regexp_replace('2,2,3,4,5 ', '([^,]+)(,\1)+', '\1') AS colFROM dual查询结果:SQL> SELECT regexp_replace('2,2,3,4,5 ', '([^,]+)(,\1)+', '\1') AS col2 FROM dual3 ;COL--------2,3,4,...

weixin_35718671的博客 341

oracle regexp_replace过滤字符串中重复内容

      有时候使用listagg(id,',') within group(order by id )得到的数据里面有很多重复的数据,注意listagg中已经排过序,这是前提,如下所示:              可以使用regexp_replace替换掉重复的内容(数字),方便使用:        如下所示:        select substr(regexp_replac...

小瓜的博客 5035

oracle 拼接JSON字符串语句

除了使用上述函数进行字符串拼接外,还可以使用CHR函数进行字符串拼接。除了使用上述函数进行字符串拼接外,还可以使用COALESCE函数进行字符串拼接。除了使用上述函数进行字符串拼接外,还可以使用XMLAGG函数进行字符串拼接。除了使用上述函数进行字符串拼接外,还可以使用SUBSTR函数进行字符串拼接。除了使用上述函数进行字符串拼接外,还可以使用REGEXP_REPLACE函数进行字符串拼接。除了使用“||”符号进行字符串拼接外,还可以使用CONCAT函数进行字符串拼接。

emma20080101的博客 425

oracle数据库listagg,Oracle中的LISTAGG返回不同的值

以下是解决问题的方法。selectregexp_replace('2,2,2.1,3,3,3,3,4,4','([^,]+)(,\1)*(,|$)', '\1\3')from dual回报2,2.1,3,4答案(见下面的注释):select col1,regexp_replace(listagg(col2 , ',') within group (order by col2) -- sorted...

weixin_39627751的博客 509

Oracle数据拼接实战:如何用LISTAGG函数快速合并多行数据(附常见问题解决)

本文深入解析Oracle数据库中的LISTAGG函数,详细介绍如何高效实现多行数据拼接为单行的操作。通过基础语法、高级应用场景、性能优化及常见问题解决方案,帮助开发者掌握数据拼接技巧,提升报表生成与数据分析效率。特别针对数据拼接中的重复值处理、大文本溢出控制等难点提供实战指导。

lg888的博客 934
上一篇: 使用vue-route下的next({ ...to, replace: true })报Redirected when going from “/login“ to “/home“ via a nav
下一篇: datatable搜索、分页、排序事件监听
sxjlinux
博客等级 码龄17年 286粉丝 296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值