`

wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换

阅读更多

构建测试表:

create table TABLE1
(
  ID   INTEGER,
  NAME VARCHAR2(10)
)

create table TABLE2
(
  ID   INTEGER,
  ROLE VARCHAR2(10)
)

insert into TABLE1 (ID, NAME) values (1, '张三');
insert into TABLE1 (ID, NAME) values (2, '李四');
commit;

insert into TABLE2 (ID, ROLE) values (1, '查询');
insert into TABLE2 (ID, ROLE) values (1, '分析');
insert into TABLE2 (ID, ROLE) values (1, '决策');
insert into TABLE2 (ID, ROLE) values (2, '查询');
commit;

 

要求输出结果:

ID	NAME	ROLE
1	 张三	查询,分析,决策
2	 李四	查询

 

 

方法一、使用wmsys.wm_concat

select table1.*,wmsys.wm_concat(role) from table1,table2 where table1.id=table2.id
group by table1.id,table1.name

 

方法二、使用sys_connect_by_path

select id, name, ltrim(max(sys_connect_by_path(role, ',')), ',') from 
(select row_number() over(partition by table1.id order by name) rn,table1.*, role from table1, table2  where table1.id = 

table2.id)
start with rn = 1
connect by prior rn = rn - 1 and prior id = id
group by id, name
order by id
       

 

方法三、使用自定义函数 

create or replace function my_concat(mid in integer) return varchar2       --记住:参数和返回值里的数据类型都不用定义长度
is
result varchar2(4000);    --定义变量,记住Oracle中定义变量不需要
begin
       for temp_cursor in (select role from table2 where id=mid) loop     --此处在游标FOR循环中使用查询
           result :=result || temp_cursor.role || ',';    --Oracle中字符连接使用||,而sql server中用+       
       end loop;
       result := rtrim(result,',');  --去掉最后一个空格,还有Oracle中的赋值前面没有set
       return result;
end;

select table1.*,my_concat(table1.id) from table1,table2 where table1.id=table2.id
group by table1.id,table1.name
order by table1.id

 

 

分享到:
评论

相关推荐

    重建WMSYS用户的WMSYS.WM_CONCAT函数的3个文件

    在Oracle数据库环境中,WMSYS.WM_CONCAT函数是一个用于字符串连接的实用工具,尤其在处理多值列时非常有用。然而,有时由于各种原因,这个函数可能丢失或损坏,需要进行重建。以下是对重建WMSYS.WM_CONCAT函数涉及的...

    wmsys.wm_concat详细示例.txt

    `wmsys.wm_concat`函数与`OVER`子句结合使用,可以实现更复杂的窗口操作。`OVER`子句允许我们定义一个窗口,这个窗口可以在整个结果集上,也可以基于某些特定的分组。这使得我们可以计算跨行的聚合函数,而不仅仅是...

    ORA-00904 WMSYS.WM_CONCAT标识符无效解决方案

    综上所述,解决"ORA-00904 WMSYS.WM_CONCAT标识符无效"的问题,主要是通过转向Oracle提供的新功能如LISTAGG,或者自定义合适的聚合函数来完成。提供的压缩包文件可能是为了解决这个问题而设计的,具体使用方法应参照...

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

    在Oracle数据库中,`WMSYS.WM_CONCAT`函数是一个非常实用的工具,它用于将多行数据合并成一个单行字符串。然而,由于其内部处理机制,当需要合并的数据量过大时,可能会遇到“字符串缓冲区太小”的错误。这是因为`WM...

    Oracle 11g 重建WMSYS.WM_CONCAT函数

    Oracle10g之后有些版本已不包含WMSYS.WM_CONCAT函数,若用到此函数, 系统会提示异常:ORA-00904: "WM_CONCAT": invalid identifier 因此需单独重建此函数,方法如下: 解压附件,在sqlplus中执行包里的owmctab....

    wmsys_wm_concat函数结果拆解

    接下来,我们将详细分析给定的部分内容中的SQL语句,理解其如何实现对`wmsys.wm_concat`函数结果的拆解。 #### SQL语句解析 ```sql with tt as ( select 1 id, 'Jack,Tom,Ben' Name from dual union all select ...

    wmsys 用户 没有WMSYS.WM_CONCAT方法

    没有WMSYS.WM_CONCAT方法 需要的文件 owmctab.plb owmaggrs.plb owmaggrb.plb 拷贝三个文件到 $ORACLE_HOME\RDBMS\ADMIN\ 目录下 打开命令行 sqlpus , 用sys 登陆 执行命令 @$ORACLE_HOME\RDBMS\ADMIN\owmctab.plb...

    Oracle重建WMSYS用户及WMSYS.WM_CONCAT函数

    解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 在sqlplus中执行包里的owmctab.plb、owmaggrs.plb、owmaggrb.plb三个脚本即可。 简单来说,用PL/SQL执行下一下几个脚本就可以了。 特别要注意:PL/SQL登录时,要...

    oracle行转列聚合函数WMSYS.WM_CONCAT

    Oracle数据库提供了多种方法来实现这一需求,其中`WMSYS.WM_CONCAT`是一个非常实用且高效的函数,它可以将多个字符串值合并成一个单独的字符串,并在每个值之间插入指定的分隔符。 #### 二、WMSYS.WM_CONCAT函数...

    Oracle重建WMSYS用户及WMSYS.WM_CONCAT函数(更低分)

    这个错误通常意味着试图访问或使用`WMSYS.WM_CONCAT`函数时遇到了问题,这是一个在早期Oracle版本中提供的聚合函数,用于字符串连接,但在较新的版本中被弃用并替换为其他更安全和高效的解决方案。 `WMSYS`是Oracle...

    ORA-00904: "WM_CONCAT": 标识符无效

    3. **使用其他数据库功能**:除了LISTAGG,还可以考虑使用XMLAGG、CONNECT_BY_LEVEL等其他Oracle函数,结合转换和处理来达到类似的效果。 4. **查询优化**:在某些情况下,通过改变查询策略,比如使用子查询、连接...

    wmsys_wm_concat的几个用法

    wmsys_wm_concat的几个用法/wmsys_wm_concat的几个用法/wmsys_wm_concat的几个用法/wmsys_wm_concat的几个用法/wmsys_wm_concat的几个用法

    oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起

    本文将详细介绍如何利用`WMSYS.WM_CONCAT`来实现这一功能。 首先,`WMSYS.WM_CONCAT`是Oracle提供的一种字符串拼接函数,它可以将相同分组内的多行数据以特定的分隔符(默认为逗号)连接起来。例如,如果我们有一个...

    oracle中将列拼接字段函数

    本文将详细介绍如何使用Oracle中的`WMSYS.WM_CONCAT`函数来实现列的拼接,并通过具体的例子帮助理解其应用场景。 ### Oracle中的WMSYS.WM_CONCAT函数 #### 函数介绍 `WMSYS.WM_CONCAT`函数是Oracle提供的一个用于...

    WMSYS 重建

    WMSYS.WM_CONCAT函数是这个系统中的一个重要组成部分,用于处理字符串的连接操作,尤其在数据仓库的ETL(Extract, Transform, Load)过程中十分常见。 当遇到“WMSYS 重建”的情况,通常是因为WMSYS.WM_CONCAT函数...

    oracle列合并的实现方法

    很多场合我们都会用到...sys_connect_by_path(字段名, 2个字段之间的连接符号),这里的连接符号不要使用逗号,oracle会报错,如果一定要用,可以使用replace替换一下,方法如下 REPLACE(字段名,原字符,’,’)。这个

    重建WMSYS用户.zip

    WMSYS.WM_CONCAT是Oracle Spatial中的一个函数,用于处理多行文本数据的连接操作,但在某些情况下可能会出现"标识符无效"的错误。这个问题通常出现在数据库升级、恢复或者对象权限出现问题时。 当您遇到“WMSYS.WM_...

Global site tag (gtag.js) - Google Analytics