`

oracle使用聚合函数实现 多行合并

阅读更多
COUNTRY              CITY
-------------------- --------------------
中国                 台北
中国                 香港
中国                 上海
日本                 东京
日本                 大阪

COUNTRY              CITY
-------------------- --------------------
中国                 台北  香港  上海
日本                 东京   大阪

select country,strcat(city) from t_city group by country

1.创建类型

create or replace type strcat_type as object (
cat_string varchar2(4000),
static function ODCIAggregateInitialize(cs_ctx In Out strcat_type) return number,
member function ODCIAggregateIterate(self In Out strcat_type,value in varchar2) return
number,
member function ODCIAggregateMerge(self In Out strcat_type,ctx2 In Out strcat_type)
return number,
member function ODCIAggregateTerminate(self In Out strcat_type,returnValue Out
varchar2,flags in number) return number
);



2. 创建类型体

create or replace type body strcat_type is
  static function ODCIAggregateInitialize(cs_ctx IN OUT strcat_type) return number
  is
  begin
      cs_ctx := strcat_type( null );
      return ODCIConst.Success;
  end;

  member function ODCIAggregateIterate(self IN OUT strcat_type,
                                       value IN varchar2 )
  return number
  is
  begin
      self.cat_string := self.cat_string || ';'|| value;
      return ODCIConst.Success;
  end;

  member function ODCIAggregateTerminate(self IN Out strcat_type,
                                         returnValue OUT varchar2,
                                         flags IN number)
  return number
  is
  begin
      returnValue := ltrim(rtrim(self.cat_string,';'),';');
      return ODCIConst.Success;
  end;

  member function ODCIAggregateMerge(self IN OUT strcat_type,
                                     ctx2 IN Out strcat_type)
  return number
  is
  begin
      self.cat_string := self.cat_string || ';' || ctx2.cat_string;
      return ODCIConst.Success;
  end;

end;

3.创建函数
CREATE OR REPLACE FUNCTION strcat(input varchar2 )
RETURN varchar2
PARALLEL_ENABLE AGGREGATE USING strcat_type;



上面的完结;

其实上面的聚合函数给oracle10G及以上版本的wm_concat(column)函数功能类似:
oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_concat(column)函数实现字段合并,如果您对oracle wm_concat(column)函数使用方面感兴趣的话,不妨一看。

shopping:

-----------------------------------------

u_id       goods            num

------------------------------------------

1                苹果                2

2                 梨子               5

1                 西瓜               4

3                 葡萄               1

3                香蕉                1

1               橘子                 3

=======================

想要的结果为:

--------------------------------

u_id          goods_sum

____________________

1              苹果,西瓜,橘子

2              梨子

3              葡萄,香蕉

---------------------------------

select u_id, wmsys.wm_concat(goods) goods_sum 

from shopping 

group by u_id 
想要的结果2:

--------------------------------

u_id          goods_sum

____________________

1              苹果(2斤),西瓜(4斤),橘子(3斤)

2              梨子(5斤)

3              葡萄(1斤),香蕉(1斤)

---------------------------------

使用oracle wm_concat(column)函数实现:

select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum 

from shopping 

group by u_id 
分享到:
评论
1 楼 lhbthanks 2013-09-04  
这个给oracle wm_concat(column)函数功能类似,可以参考:[url]http://database.51cto.com/art/201010/231126.htm [/url]

相关推荐

    Oracle多行记录合并

    - **`LISTAGG()` 函数:** 这是Oracle 11g及以后版本引入的一个强大的聚合函数,专门用于将多行数据合并为单行字符串。它接受一个排序表达式和一个分隔符,返回所有行的合并结果。例如,假设我们有一个名为`orders`...

    sql实现多行合并一行

    总结来说,通过巧妙地运用Oracle的`CONNECT BY`和`SYS_CONNECT_BY_PATH`函数,我们可以实现多行数据到一行的合并,这对于报告展示和数据分析非常实用。不过要注意的是,这种方法在大数据量下可能会有性能问题,因为...

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    Oracle数据库在处理多行记录合并、连接和聚合字符串时,有多种方法,下面将详细介绍其中的几种常见技术。 1. 被集合字段范围小且固定型 这种方法适用于字段值有限且已知的情况。通过使用`DECODE`函数,我们可以为每...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    `LISTAGG()`是Oracle 11g引入的一个聚合函数,用于将多行数据合并为一个字符串,特别适合于分组查询。它允许指定分隔符: ```sql SELECT column1, LISTAGG(column2, ', ') WITHIN GROUP (ORDER BY column2) FROM...

    oracle实现多行合并的方法

    总的来说,`WMSYS.WM_CONCAT`和`LISTAGG`都是处理多行合并的有力工具,但在实际应用中,考虑到稳定性和兼容性,建议优先选择`LISTAGG`函数。同时,了解这些函数可以帮助你更好地处理和展示Oracle数据库中的聚合数据...

    PLSQL单行函数和组函数详解

    在Oracle的PL/SQL编程中,函数是极其重要的组成部分,它们用于处理和操作数据。本篇文章将详细讲解PL/SQL中的单行函数和组函数。 首先,单行函数是针对单行数据进行操作的函数,它们可以应用于SQL查询的不同部分,...

    Oracle 多行记录合并/连接/聚合字符串的几种方法

    在Oracle中,虽然没有内置的聚合函数直接支持这种操作,但可以通过一些技巧和自定义方法来实现。下面我们将对几种常用的方法进行详细介绍。 1. **被集合字段范围小且固定型** 这种方法适用于已知待合并字段值的...

    oracle行转列聚合函数WMSYS.WM_CONCAT

    ### Oracle行转列聚合函数WMSYS.WM_CONCAT详解 #### 一、概述 在进行数据处理时,经常会遇到需要将多行数据合并为单行的情况,这通常被称为“行转列”。Oracle数据库提供了多种方法来实现这一需求,其中`WMSYS.WM_...

    oracle将以逗号分隔字符串转多行

    在Oracle数据库中,将逗号分隔的字符串转换为多行是常见的数据处理需求,尤其在需要对每个分隔项进行单独操作时。这个过程通常涉及到字符串处理函数,如`REGEXP_SUBSTR`和`REPLACE`,以及层次查询结构`CONNECT BY`。...

    Oracle内建函数大全

    5. **聚合函数** - SUM:计算一组数值的总和。 - AVG:计算一组数值的平均值。 - COUNT:计算行数或满足条件的行数。 - MAX/MIN:找出一组数值的最大值或最小值。 6. **比较和逻辑函数** - NVL/NVL2:处理NULL...

    oracle实现行转列功能,并使用逗号进行隔开拼接,成为一条数据.pdf

    WM_CONCAT 函数是一个聚合函数,可以将多行数据合并成一个字符串。使用 WM_CONCAT 函数可以实现行转列功能,但是需要注意的是,WM_CONCAT 函数已经被 Oracle 弃用,不建议使用。 示例代码: ```sql SELECT sfc_no, ...

    Oracle实用函数大全

    `wm_concat`函数用于聚合查询结果,实现多行数据的合并: ```sql SELECT WM_CONCAT(ENAME) FROM EMP; ``` ### 三、数据类型转换函数 #### 1. to_char `to_char`函数将日期或数字转换为字符串,支持自定义格式化: ...

    类似于wmsys.wm_concat的自定义函数clob版

    `STRAGG`函数在某些数据库系统中是一个内置的聚合函数,但在Oracle中并不是,所以很可能这两个脚本是用户自定义实现的版本。 `STRAGGC`可能是一个CLOB版本的实现,它的功能是在聚合时返回CLOB类型的值,这样就可以...

    oracle-函数.pptx

    多行函数,如聚合函数(SUM, AVG, MAX, MIN)和分析函数(RANK, DENSE_RANK, ROW_NUMBER),则用于处理多行数据,对一组数据进行操作并返回一个或多个结果。例如,`SUM()`函数可以用来计算某列的总和。 在Oracle中...

    oracle材料

    1. **Listagg函数**:`listagg`是Oracle 11g引入的一个聚合函数,用于将多行数据合并为单行。它接受两个参数,一个是需要聚合的列,另一个是分隔符。例如,如果有个`orders`表包含`customer_id`和`product`列,你...

    oracle语法大全

    这种方法利用了窗口函数`ROW_NUMBER()`来为每行分配一个序号,然后通过自连接找到相邻的行,最后使用`STRING_AGG`(这是一个模拟的函数,实际的Oracle中没有,但可以使用其他方法实现类似效果)进行合并。...

    oracle合并列的函数wm_concat的使用详解

    最后,关于可能感兴趣的相关文章,包括Oracle中多行记录合并、连接、聚合字符串的不同方法,以及如何在Oracle中实现类似功能的其他技术,如使用`GROUP_CONCAT`(这是MySQL中的一个函数,Oracle没有直接对应的内置...

    Oracle P/L SQL实现发送Email、浏览网页等网络操作功能

    使用聚合函数实现 多行合并 Drop Type Strcat_type; Drop Function f_StrCat; Drop Package UTL_INet; Variable ls_ObjectName VarChar2(128); Begin Select Sequence_Name Into :ls_ObjectName From User_...

Global site tag (gtag.js) - Google Analytics