关闭

Oracle LISTAGG排重方法

标签: regexp_replacelistagg
17806人阅读 评论(2) 收藏 举报
分类:

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排重。



1
0
查看评论

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

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

Oracle列转行函数 Listagg() 语法详解及应用实例

工作中用到一段比较复杂的SQL查询脚本,使用了listagg()函数实现了具有多个值的列字段的填充(即,列表聚合,list aggregation(我猜的))。 说简单点,listagg()函数可以实现多列记录聚合为一条记录,从而实现数据的压缩、致密化(data densification)。 以下...
  • hpdlzu80100
  • hpdlzu80100
  • 2017-01-03 22:16
  • 7000

Oracle-11g 新函数 LISTAGG 行转列

现在oracle数据库都在用11g的了,
  • suyishuai
  • suyishuai
  • 2014-05-15 11:31
  • 11754

oracle函数listagg的使用说明

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

listagg

with temp as(     select 'China' nation ,'Guangzhou' city from dual union all     select 'China' nation ...
  • Sun_Boys
  • Sun_Boys
  • 2016-10-11 22:46
  • 359

oracle函数listagg()

在开始演示之前我们需要新建一张表出来: with temp as(     select 'China' nation ,'Guangzhou' city from dual union all     select &#...
  • u013058618
  • u013058618
  • 2016-09-30 14:01
  • 1538

Oracle 列转行函数 Listagg()

最基础的用法: LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX) 例如有这样一张表: FID    FType   FName 1       DB   &#...
  • qq_27918787
  • qq_27918787
  • 2016-09-25 11:07
  • 6552

Oracle11.2新特性之listagg函数

Oracle11.2新增了LISTAGG函数,可以用于字符串聚集,测试如下: 1,版本 SQL> select * from v$version; BANNER ----------------------------------------------------------...
  • lively1982
  • lively1982
  • 2013-02-27 22:04
  • 14358

oracle 多行合并成一行: listagg \ within group

工作时遇到需求 : 按照某字段进行分组,并把其中一列的值合并显示在一个字段中 如: 1 苹果 1 鸭梨 2 香蕉 2 葡萄 显示为 : 1 苹果\鸭梨 2 香蕉\葡萄经过学习可以...
  • baojiangfeng
  • baojiangfeng
  • 2017-03-15 21:04
  • 4448

行专列listagg返回的是varchar2,长度过长报错问题

select LISTAGG (a.nename,',') within group (order by a.nename) nename from      (select distinct d.ne_name as nename from t_eo...
  • luman1991
  • luman1991
  • 2016-09-30 16:54
  • 2086
    个人资料
    • 访问:1932710次
    • 积分:15610
    • 等级:
    • 排名:第833名
    • 原创:195篇
    • 转载:13篇
    • 译文:0篇
    • 评论:50条
    技术交流

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