listagg去重

  1. 去重思路:利用listagg会忽略null值的特点

  2. 按ENTITY_GROUP_RRN 分组,用 listagg 分别合并 EQPT_ID 与 STATION_ID ,同时要求去重
    表 T_TEST 数据如下:

EQPT_ID ENTITY_GROUP_RRN STATION_ID
TOOL-001 10493721 JITAI-1
TOOL-003 10493721 JITAI-1
TEST 10493721 S1
TEST 10493721 S2
TEST2 10493721 S1
TEST2 10493721 S2
TOOL-001 12345 JITAI-1
TOOL-003 12345 JITAI-1
TEST 12345 S1
TEST 12345 S2
TEST2 12345 S1
TEST2 12345 S2

3、上SQL:

with T_TEST as(select 'TOOL-001' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TOOL-003' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual union allselect 'TOOL-001' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TOOL-003' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 123456 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual
)
select t.entity_group_rrn,listagg(decode(rne, 1, t.eqpt_id, null), ',') within group(order by t.eqpt_id) eqpt_ids,listagg(decode(rns, 1, t.station_id, null), ',') within group(order by t.station_id) station_idsfrom (select row_number() over(partition by t.entity_group_rrn,t.eqpt_id order by rownum) rne,row_number() over(partition by t.entity_group_rrn,t.station_id order by rownum) rns,t.*from T_TEST t) tgroup by t.entity_group_rrn;

查询结果

  • 总结
    1、通常情况可以先分组去重,再合并即可,除非遇到同一分组中,多列分别有重复值,才需要上面那样处理
    2、还有另一种去重办法,使用 wm_concat + distinct ,如下:
with T_TEST as(select 'TOOL-001' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TOOL-003' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'JITAI-1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S1' STATION_ID from dual union allselect 'TEST2' EQPT_ID, 10493721 ENTITY_GROUP_RRN, 'S2' STATION_ID from dual
)
select wm_concat(distinct t.EQPT_ID) ids,entity_group_rrn, wm_concat(distinct t.station_id) ids2
from T_TEST t  group by t.entity_group_rrn

但是由于官方不推荐使用 wm_concat ,所以尽量不要用此方法

oracle listagg如何去重相关推荐

  1. listagg结果去重

    最近在一个项目中用到了listagg方法,但是在组合结果中出现有重复的情况.默认的结果如下 于是我就写了一个方法对listagg的结果去重,也可以对该格式的字符串去重,方法如下 create or r ...

  2. Oracle之字符串去重统计

    需求:listagg去重,字符串去重,去重统计 select listagg(t.city, ',') within group(order by t.city),regexp_replace((li ...

  3. Oracle备份时发现空间不够,存储空间比较紧张的情况下,如何提升Oracle备份的去重率?...

    nbu配置Oracle备份,有两种方式: 传统脚本方式, 就是创建1个备份脚本,policy调用这个脚本来备份 智能策略: 先从java console注册Oracle实例,在创建策略的时候直接通过注 ...

  4. Oracle 表数据去重

    Oracle数据库中重复数据怎么去除?使用数据表的时候经常会出现重复的数据,那么要怎么删除呢?下面我们就来说一说去除Oracle数据库重复数据的问题.今天我们要说的有两种方法. 一.根据rowid来去 ...

  5. oracle对substr去重,oracle使用笔记

    1.scott解锁 alter user scott identified by tiger; alter user scott account unlock; 2.导表 @d:/oracle/tab ...

  6. oracle over函数 去重,oracle over结合row_number分区进行数据去重处理

    一.创建一个测试表A CREATE TABLE A( ID INT, NAME VARCHAR2(20) ); 二.向表中添加数据,且存在相同的数据 INSERT INTO A VALUES(1,'Y ...

  7. oracle listagg方法,Oracle实现字符串拼接和分离功能的方法(LISTAGG函数),oraclelistagg...

    Oracle实现字符串拼接和分离功能的方法(LISTAGG函数),oraclelistagg 字符串拼接(String Aggregation Techniques)是数据处理时经常需要用到一个技术, ...

  8. MYSQL/ORACLE多字段去重-根据某字段去重

    通过百度上的答案多数无效 自己搞了个 使用oracle row_number()函数,给每个同名的加一个序号,最后筛选第n个想同的即可 oracle与mysql不同 1.oracel 多字段disti ...

  9. ORACLE和MYSQL 去重查询

    ORACLE // 去重查询 select * from(select 别名1.*, row_number() over(partition by 别名1.列名1 order by 别名1.列名2 A ...

最新文章

  1. php高级技术考试题,PHP高级技术考试题.doc
  2. java 系统 类_JAVA系统类 System的简单整理
  3. 小米登录协议分析_小米回应小米11充电头兼容问题
  4. react context_使用React Context API-入门
  5. 用计算机解决问题听课笔记,《计算机解决问题的过程》的教学设计
  6. php加入队列失败,Laravel队列使用中踩的坑,不报错但是队列一直再重试
  7. TensorFlow使用--MNIST分类学习(BP神经网络)
  8. docker搭建upload-labs
  9. 税控盘系统参数设置服务器,税控盘设置服务器地址
  10. 数据结构之斐波那契数列java实现
  11. win10磁盘占用率过高解决办法
  12. Prometheus+Grafana搭建Jmeter性能监控平台
  13. 【数据结构】顺序表详解 | 从零开始步步解读 | 画图理解并调试分析
  14. 关于DP和HDMI和VGA和RS232这几种接口的实用性和功能性分析
  15. FullCalendar-vue demo例子
  16. 布尔代数(Boolean Algebra)
  17. 贝叶斯基础理论及思想介绍
  18. 网络安全培训出来为什么比较好找工作?
  19. Rufus 制作U盘启动
  20. 红米k40pro+一键锁屏设置教程分享

热门文章

  1. 外贸找客户的几十种方法,总有一种适合你
  2. 小菜鸟的python进阶之路 ------- 匿名函数
  3. CAPP是利用计算机技术,企业CAPP应用分析
  4. Linux命令行安装Db2
  5. 【OpenGL进阶】05.绘制3D模型
  6. LaTeX 变量用正体
  7. lodop java_Java的云打印Lodop
  8. 判断宝宝的11种哭声
  9. python range step_python range用法
  10. 枚举类根据name获取value