- 浏览: 1773976 次
- 性别:
- 来自: 成都
-
文章分类
- 全部博客 (520)
- Oracle (10)
- Oracle错误集 (8)
- Oracle安装升级 (15)
- Oracle日常管理 (51)
- Oracle字符集 (7)
- Oracle备份恢复 (24)
- Oracle优化 (4)
- Oracle编程 (52)
- Oracle导入导出 (19)
- Oracle体系结构 (15)
- Oracle网络 (2)
- Oracle安全 (2)
- Oracle权限 (3)
- Oracle数据字典和性能视图 (2)
- Oracle常用地址 (5)
- SQLPLUS专栏 (7)
- SqlServer (13)
- SqlServer2005编程 (27)
- SqlServer2005管理 (15)
- MySQL (20)
- Dorado应用 (1)
- C# (24)
- Arcgis Server开发 (20)
- ArcSDE技术 (19)
- UML学习 (2)
- 设计模式 (2)
- JAVA EE (4)
- JavaScript (3)
- OFBIZ (27)
- JAVA WEB开发 (22)
- Linux&Unix (34)
- SHELL编程 (14)
- C语言 (11)
- 网络协议 (14)
- FREEMARKER (2)
- GROOVY (2)
- JAVA语言 (3)
- 防火墙 (0)
- PHP (2)
- Apache (2)
- Loader Runner (1)
- Nginx (3)
- 数据库理论 (2)
- maven (1)
最新评论
-
怼怼怼怼:
oracle的timestamp类型使用 -
怼怼怼怼:
oracle的timestamp类型使用 -
怼怼怼怼:
oracle的timestamp类型使用 -
pg_guo:
感谢
oracle中查看用户权限 -
xu234234:
5、MapResourceManager控件中添加了两个服务, ...
北京ArcGis Server应用基础培训笔记1
构建测试表:
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
发表评论
-
To_Date函数用法
2014-11-07 11:04 1740spl> select * from emp ... -
Oracle中的MD5加密
2014-02-15 10:18 1499一、技术点 1、 DBMS_OBFUSCATION_TO ... -
oracle行列转换总结
2014-02-15 10:18 1025最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换 ... -
Oracle数据库中的''与NULL的关系
2014-02-15 10:17 1333在Oracle数据库中''与NULL是等价的。均表示空值, ... -
快速删除重复的记录
2014-02-15 10:17 669做项目的时候,一位同事导数据的时候,不小心把一个表中的数据 ... -
Oracle的rownum原理和使用
2014-02-15 10:17 1133Oracle的rownum原理和使用 在Oracle中, ... -
ORACLE中查询某个字段包含回车换行符
2013-04-11 15:42 11341很简单,但是很多人一下估计还不一定知道。 select * ... -
ORACLE触发器(转)
2013-03-06 23:58 1191本篇主要内容如下: ... -
使用forall语句的bulk dml操作
2008-11-13 17:27 3818在oracle 8i或更高版本的forall语句中,oracl ... -
判断俩个值的大小函数sign
2008-11-10 11:13 2952比较大小select decode(sign(变量1-变量2) ... -
Oracle 触发器应用
2008-11-06 15:37 2222触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程, ... -
PLSQL学习笔记
2008-10-23 16:58 2293在网上看到的一个比较好的PLSQL学习笔记,放在这里方便以后查 ... -
Oracle自定义函数实例
2008-10-22 16:35 20123--没有参数的函数 create or replace fun ... -
Oracle自定义类型使用一例
2008-10-22 16:28 4300一、创建自定义类型 create type t_air as ... -
Oracle存储过程实例
2008-10-22 15:30 3538/*不带任何参数存储过程*/ create or replac ... -
Oracle的异常处理
2008-10-22 14:40 3056oracle提供了预定义例外 ... -
识别低效的语句
2008-10-15 09:04 1488SELECT EXECUTIONS , DISK_READS, ... -
PL/SQL Developer使用技巧
2008-10-07 15:18 67361、PL/SQL Developer记住登陆密码 在使用 ... -
Oracle 绑定变量
2008-10-06 10:53 4403在oracle 中,对于一个提交的sql语句,存在两种可选的解 ... -
使用 WMSYS.WM_CONCAT 进行列转换
2008-09-10 14:13 2115select t.rank, t.Name from t_me ...
相关推荐
很多场合我们都会用到...sys_connect_by_path(字段名, 2个字段之间的连接符号),这里的连接符号不要使用逗号,oracle会报错,如果一定要用,可以使用replace替换一下,方法如下 REPLACE(字段名,原字符,’,’)。这个
这里介绍一种使用`sys_connect_by_path()`函数结合`connect by`语法的方法。 **示例代码:** ```sql SELECT name, MAX(REPLACE(SUBSTR(sys_connect_by_path(course, '*'), 2), '*', ';')) AS courses FROM ( ...
介绍了将多行转为字符串的三种方案,并比较了三种方案的执行效率. 1.sys_connect_by_path + start with ... connect by ... prior + 分析函数 2.自定义Function/SP 3.使用 Oracle 10g 内置函数 wmsys.wm_concat
而当您需要确保结果字符串的排序准确无误时,`SYS_CONNECT_BY_PATH` 和 `CONNECT BY PRIOR` 可能是最可靠的选择。 总之,了解各种方法的特点及其适用场景可以帮助您做出最佳决策,从而高效地完成行列转换任务。
之后使用`SYS_CONNECT_BY_PATH`函数,通过递归的方式将每个节点下的`ROLE`列值按照指定的分隔符(此处为逗号)进行连接。 以上是对给定文档中几个主要知识点的总结与解释,希望能帮助你更好地理解和掌握这些Oracle ...
`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)...
- **SYS_CONNECT_BY_PATH()**:用于构建层次路径。 - **ORDER SIBLINGS BY**:按照指定顺序排列同级节点。 - **The NOCYCLE**:防止查询进入无限循环。 通过遵循以上SQL最佳实践,可以显著提高数据库应用的性能和可...