Oracle LISTAGG排重方法

标签: regexp_replace listagg
18373人阅读 评论(3) 收藏 举报
分类:

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,3,4,5
可以对字符串进行排重


2. 使用上面的正则表达式对listagg进行排重

SELECT listagg(t.deptno, ',') within GROUP(ORDER BY t.deptno) deptno,
       regexp_replace((listagg(t.deptno, ',') within GROUP(ORDER BY t.deptno)), '([^,]+)(,\1)+', '\1') bl_number
  FROM scott.emp t
执行结果:

SQL> SELECT listagg(t.deptno, ',') within GROUP(ORDER BY t.deptno) deptno,
  2         regexp_replace((listagg(t.deptno, ',') within GROUP(ORDER BY t.deptno)), '([^,]+)(,\1)+', '\1') bl_number
  3    FROM scott.emp t
  4  ;
 
DEPTNO                                                                           BL_NUMBER
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
10,10,10,20,20,20,20,20,30,30,30,30,30,30                                        10,20,30
成功对listagg排重。



查看评论

oracle 聚合函数 LISTAGG ,将多行结果合并成一行

LISTAGG(列名,' 分割符号') oracle 11g 以上的版本才有的一个将指定列名的多行查询结果,用 指定的 分割符号 合并成一行显示: 例如: 表原始数据: 需求:将 mb1_Tra...
  • sinat_35626559
  • sinat_35626559
  • 2017-05-22 10:29:48
  • 13061

oracle listagg() 去重

oracle : regexp_replace((listagg(OV.PNR, ',' ) within group (order by OV.PNR)), '([^,]+)(,\1)+', '\1...
  • LX_manito
  • LX_manito
  • 2017-11-09 14:34:42
  • 10347

使用Listagg分析函数优化wmsys.wm_concat

在上周末优化班的时候一个朋友拿了一个SQL出来,让我现场优化,因为当时太忙,我安排七年老师帮忙处理。跑得慢的SQL如下:with temp as                 (select sgd...
  • robinson1988
  • robinson1988
  • 2016-06-09 02:28:24
  • 11219

调试经验——Oracle列转行函数 Listagg() 查询结果的去重(去除重复值)方法

今天,在使用LISTAGG()函数连接不同角色所有人员的完整名称时,发现LISTAGG()函数本身并不提供去重的功能(相同的人名,在结果中会重复显示)。问问度娘,没有找到好用的解决方法。然后使用Yah...
  • hpdlzu80100
  • hpdlzu80100
  • 2018-03-09 22:58:59
  • 80

oracle函数listagg的使用说明

oracle函数listagg的使用说明
  • lovelichao12
  • lovelichao12
  • 2016-04-08 17:24:58
  • 16590

Oracle SQL函数listagg实现多行字符串连接

Oracle SQL函数listagg实现多行字符串连接
  • Seandba
  • Seandba
  • 2017-05-24 13:53:24
  • 1662

Oracle11.2新特性之listagg函数(多条数据用逗号隔开)

Oracle11.2新增了LISTAGG函数,可以用于字符串聚集,测试如下: 1,版本 SQL> select * from v$version;   BANNER ----------...
  • ForeverDWYW
  • ForeverDWYW
  • 2016-06-12 14:26:44
  • 1490

Oracle 查询高级用法

Oracle SQL 一些函数用法 以下sql环境都是在 oracle 11g/scott 完成 Group by 与GROUP BY 一起使用的关建字 GROUPING,GROUP SET,ROLL...
  • lanchengxiaoxiao
  • lanchengxiaoxiao
  • 2013-12-10 17:57:06
  • 8443

oracle,把多列同时转成用逗号分割的一行,并去除重复数据

SELECT regexp_replace(create_user, '([^,]*)(,\1)+($|,)', '\1\3') createUser, regexp_replace(...
  • u011217058
  • u011217058
  • 2017-09-01 10:29:25
  • 438

oracle函数listagg()

在开始演示之前我们需要新建一张表出来: with temp as(     select 'China' nation ,'Guangzhou' city from dual union all ...
  • u013058618
  • u013058618
  • 2016-09-30 14:01:34
  • 2006
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 197万+
    积分: 1万+
    排名: 850
    技术交流

    苏南生的博客
    主页 | BOOK搜索 | 免费杂志 |
    博客专栏
    最新评论