wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
来源:互联网 发布:guy里guy气网络用语 编辑:程序博客网 时间:2024/05/21 11:06
转载自:http://dbajun.iteye.com/blog/250382
构建测试表:
Sql代码
- 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;
要求输出结果:
Sql代码
- ID NAME ROLE
- 1 张三 查询,分析,决策
- 2 李四 查询
方法一、使用wmsys.wm_concat
Sql代码
- select table1.*,wmsys.wm_concat(role) from table1,table2 where table1.id=table2.id
- group by table1.id,table1.name
方法二、使用sys_connect_by_path
Sql代码
- 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
方法三、使用自定义函数
Sql代码
- 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
0 0
- wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- Oracle: wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- Oracle: wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- Oracle List 功能 《=》 Oracle: wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- 使用WMSYS.WM_CONCAT函数实现行列转换
- 使用WMSYS.WM_CONCAT函数实现行列转换
- 使用WMSYS.WM_CONCAT函数实现行列转换
- WMSYS.WM_CONCAT() 行列转换
- 警示:通过 wmsys.wm_concat 实现行列转换 clob
- 自定义函数替代WMSYS.WM_CONCAT
- oracle sys_connect_by_path实现行列转换
- SQL SERVER 合并重复行,行列转换(sql server2000 里面如何实现oracle10g的 wmsys.wm_concat() 的功能?)
- wmsys.wm_concat函数用法
- wmsys.wm_concat函数【转帖】
- 算法6-2:解决哈系冲突之独立链表
- Oracle异常处理
- 【排序算法】选择排序(C++实现)
- PL/SQL编程要点
- linux下交叉编译工具链的安装
- wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- [ACdream原创群赛(12)のBUAA选拔赛]E:签到
- Java 理论与实践: 正确使用 Volatile 变量
- BlueJ的code pad
- ORACLE分析函数(1)
- DAS SEMQ优化
- Authid current_user的用法
- 股市基础知识、主力建仓【一】
- nodejs相关