wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
来源:互联网 发布:面试java项目测试用例 编辑:程序博客网 时间:2024/05/17 06:26
构建测试表:
- 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;
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 李四 查询
IDNAMEROLE1 张三查询,分析,决策2 李四查询
方法一、使用wmsys.wm_concat
- select table1.*,wmsys.wm_concat(role) from table1,table2 where table1.id=table2.id
- group by table1.id,table1.name
select table1.*,wmsys.wm_concat(role) from table1,table2 where table1.id=table2.idgroup 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
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 = 1connect by prior rn = rn - 1 and prior id = idgroup by id, nameorder 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.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函数【转帖】
- PGA介绍
- dom加xml的三级联动源码
- Linq To XML
- 做一个心如止水的程序员会
- BCB 版本的MD5算法
- wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- ZCOMMON通用函数
- weblogic10生产模式下启动不用输入用户名密码
- 思路,GV 动态绑定数据,(自动适应创建行与列)
- thinkpad T410i 安装XP时用的一些连接
- 新建WPF应用程序操作提示:没有可用于"D:\xx\……\xx.xaml"的编辑器确保已安装文件类型(.xaml)的应用程序
- CKEditor 修改编辑器 字体大小和行高
- Js打印局部页面果然好东东啊
- JDBC连接各种数据库