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
分享到:
相关推荐
- **`LISTAGG()` 函数:** 这是Oracle 11g及以后版本引入的一个强大的聚合函数,专门用于将多行数据合并为单行字符串。它接受一个排序表达式和一个分隔符,返回所有行的合并结果。例如,假设我们有一个名为`orders`...
总结来说,通过巧妙地运用Oracle的`CONNECT BY`和`SYS_CONNECT_BY_PATH`函数,我们可以实现多行数据到一行的合并,这对于报告展示和数据分析非常实用。不过要注意的是,这种方法在大数据量下可能会有性能问题,因为...
Oracle数据库在处理多行记录合并、连接和聚合字符串时,有多种方法,下面将详细介绍其中的几种常见技术。 1. 被集合字段范围小且固定型 这种方法适用于字段值有限且已知的情况。通过使用`DECODE`函数,我们可以为每...
`LISTAGG()`是Oracle 11g引入的一个聚合函数,用于将多行数据合并为一个字符串,特别适合于分组查询。它允许指定分隔符: ```sql SELECT column1, LISTAGG(column2, ', ') WITHIN GROUP (ORDER BY column2) FROM...
总的来说,`WMSYS.WM_CONCAT`和`LISTAGG`都是处理多行合并的有力工具,但在实际应用中,考虑到稳定性和兼容性,建议优先选择`LISTAGG`函数。同时,了解这些函数可以帮助你更好地处理和展示Oracle数据库中的聚合数据...
在Oracle的PL/SQL编程中,函数是极其重要的组成部分,它们用于处理和操作数据。本篇文章将详细讲解PL/SQL中的单行函数和组函数。 首先,单行函数是针对单行数据进行操作的函数,它们可以应用于SQL查询的不同部分,...
在Oracle中,虽然没有内置的聚合函数直接支持这种操作,但可以通过一些技巧和自定义方法来实现。下面我们将对几种常用的方法进行详细介绍。 1. **被集合字段范围小且固定型** 这种方法适用于已知待合并字段值的...
### Oracle行转列聚合函数WMSYS.WM_CONCAT详解 #### 一、概述 在进行数据处理时,经常会遇到需要将多行数据合并为单行的情况,这通常被称为“行转列”。Oracle数据库提供了多种方法来实现这一需求,其中`WMSYS.WM_...
在Oracle数据库中,将逗号分隔的字符串转换为多行是常见的数据处理需求,尤其在需要对每个分隔项进行单独操作时。这个过程通常涉及到字符串处理函数,如`REGEXP_SUBSTR`和`REPLACE`,以及层次查询结构`CONNECT BY`。...
5. **聚合函数** - SUM:计算一组数值的总和。 - AVG:计算一组数值的平均值。 - COUNT:计算行数或满足条件的行数。 - MAX/MIN:找出一组数值的最大值或最小值。 6. **比较和逻辑函数** - NVL/NVL2:处理NULL...
WM_CONCAT 函数是一个聚合函数,可以将多行数据合并成一个字符串。使用 WM_CONCAT 函数可以实现行转列功能,但是需要注意的是,WM_CONCAT 函数已经被 Oracle 弃用,不建议使用。 示例代码: ```sql SELECT sfc_no, ...
`wm_concat`函数用于聚合查询结果,实现多行数据的合并: ```sql SELECT WM_CONCAT(ENAME) FROM EMP; ``` ### 三、数据类型转换函数 #### 1. to_char `to_char`函数将日期或数字转换为字符串,支持自定义格式化: ...
`STRAGG`函数在某些数据库系统中是一个内置的聚合函数,但在Oracle中并不是,所以很可能这两个脚本是用户自定义实现的版本。 `STRAGGC`可能是一个CLOB版本的实现,它的功能是在聚合时返回CLOB类型的值,这样就可以...
多行函数,如聚合函数(SUM, AVG, MAX, MIN)和分析函数(RANK, DENSE_RANK, ROW_NUMBER),则用于处理多行数据,对一组数据进行操作并返回一个或多个结果。例如,`SUM()`函数可以用来计算某列的总和。 在Oracle中...
1. **Listagg函数**:`listagg`是Oracle 11g引入的一个聚合函数,用于将多行数据合并为单行。它接受两个参数,一个是需要聚合的列,另一个是分隔符。例如,如果有个`orders`表包含`customer_id`和`product`列,你...
这种方法利用了窗口函数`ROW_NUMBER()`来为每行分配一个序号,然后通过自连接找到相邻的行,最后使用`STRING_AGG`(这是一个模拟的函数,实际的Oracle中没有,但可以使用其他方法实现类似效果)进行合并。...
最后,关于可能感兴趣的相关文章,包括Oracle中多行记录合并、连接、聚合字符串的不同方法,以及如何在Oracle中实现类似功能的其他技术,如使用`GROUP_CONCAT`(这是MySQL中的一个函数,Oracle没有直接对应的内置...
使用聚合函数实现 多行合并 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_...