您的位置:首页 > 数据库 > Oracle

Oracle [sys_connect_by_path] 函数

2014-11-04 17:24 323 查看
create table test
(
NO NUMBER,
VALUE VARCHAR2(100),
NAME VARCHAR2(100)
);

--------------------------------------
insert into test
select * from
(
select '1','a','测试1' from dual union all
select '1','b','测试2' from dual union all
select '1','c','测试3' from dual union all
select '1','d','测试4' from dual union all
select '2','e','测试5' from dual union all
select '4','f','测试6' from dual union all
select '4','g','测试7' from dual
);

--------------------------------------

select No,
ltrim(max(sys_connect_by_path(Value, ';')), ';') as Value,
ltrim(max(sys_connect_by_path(Name, ';')), ';') as Name
from (

select No,
Value,
Name,
rnFirst,
lead(rnFirst) over(partition by No order by rnFirst) rnNext
from (select a.No,
a.Value,
a.Name,
row_number() over(order by a.No, a.Value desc) rnFirst
from Test a) tmpTable1

) tmpTable2
start with rnNext is null
connect by rnNext = prior rnFirst
group by No;

--------------------------------------
select No,
ltrim(max(sys_connect_by_path(Value, ';')), ';') as Value,
ltrim(max(sys_connect_by_path(Name, ';')), ';') as Name
from (

select No,
Value,
Name,
rnFirst,
lead(rnFirst) over(order by rnFirst) rnNext
from (select a.No,
a.Value,
a.Name,
row_number() over(order by a.No, a.Value desc) rnFirst
from Test a) tmpTable1

) tmpTable2
start with rnNext is null
connect by rnNext = prior rnFirst
group by No;

-----------------------------------------

-----------------------------------------

把C_MAIL表中的所有列名串起来:

select max(substr(sys_connect_by_path(column_name,','),2))
from (select column_name,rownum rn from user_tab_columns where table_name ='C_MAIL')
start with rn=1 connect by rn=rownum ;

select sys_connect_by_path(column_name,',')
from (select column_name,rownum rn from user_tab_columns where table_name ='C_MAIL')
start with rn=1 connect by rn=rownum ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: