日期:2014-05-16 浏览次数:20350 次
--合并行的示例代码 --示例1 select id,name from ( select id,name,row_number() over(partition by id order by piece desc) as piece from ( select id,replace(sys_connect_by_path(name,';'),';','') as name,piece from ( select id,name,piece as child,piece-1 as father,piece from ( select 1 as id,'我是' as name,1 as piece from dual union all select 1 as id,'中国' as name,2 as piece from dual union all select 1 as id,'人' as name,3 as piece from dual ) t1 ) t2 start with father=0 connect by prior child=father ) t3 ) t where piece=1
通过sys_connect_by_path实现行的合并,通过上述代码,可举一反三,实现生成树的路径,另外,实现行的合并可使用decode函数,也可以自定义函数实现,这里只是抛砖引玉介绍sys_connect_by_path函数的方法。
注:
1.自Oracle 9i 开始,就可以通过 SYS_CONNECT_BY_PATH 函数实现将从父节点到当前行内容以“path”或者层次元素列表的形式显示出来;
--代码见顶部的示例1
示例2 select id,child,father,connect_by_isleaf from ( select id,name,piece as child,piece-1 as father,piece from ( select 1 as id,'我是' as name,1 as piece from dual union all select 1 as id,'中国' as name,2 as piece from dual union all select 1 as id,'人' as name,3 as piece from dual ) t1 ) t2 start with father=0 connect by prior child=father
--示例3 select connect_by_root name,id,name,child,father,piece,replace(sys_connect_by_path(name,';'),';','') as name from ( select id,name,piece as child,piece-1 as father,piece from ( select 1 as id,'我是' as name,1 as piece from dual union all select 1 as id,'中国' as name,2 as piece from dual union all select 1 as id,'人' as name,3 as piece from dual ) t1 ) t2 start with father=0 connect by prior child=father; --注意:connect_by_root后必须跟上要显示的选择列,比如我这里让它显示的是name字段
--注:上述3个函数必须带上start with和connect by prior关键字