表数据如下:
ID PUP CONTENT
1 0 a
2 1 b
3 1 c
4 2 d
5 2 e
6 3 f
7 3 g
8 5 h
9 5 j
10 8 k
我希望得到2级结构,就是除了1,2级节点外,其它的节点的ID全部换成它的第二顶级节点ID,希望得到的结果如下:
ID PUP CONTENT
1 0 a
2 1 b
3 1 c
2 2 d
2 2 e
3 3 f
3 3 g
2 5 h
2 5 j
2 8 k 请高手帮忙
ID PUP CONTENT
1 0 a
2 1 b
3 1 c
4 2 d
5 2 e
6 3 f
7 3 g
8 5 h
9 5 j
10 8 k
我希望得到2级结构,就是除了1,2级节点外,其它的节点的ID全部换成它的第二顶级节点ID,希望得到的结果如下:
ID PUP CONTENT
1 0 a
2 1 b
3 1 c
2 2 d
2 2 e
3 3 f
3 3 g
2 5 h
2 5 j
2 8 k 请高手帮忙
解决方案 »
- 写了一个sql脚本,用命令行执行有错误,求解
- 求一条insert 语句,在线等
- 关于把html代码保存到oracle中的问题
- WEBSPHERE在LINUX下安装完成后,无法启动服务?
- linux下oracle导出dmp到windows操作系统并能用文本或excel打开,急呀!!
- 存储过程中创建一个临时表
- xdjm 帮忙解决一个问题吧!
- 新建一个用户,怎么才能够能够让他有权限登陆(我的可用分只有十分了,不好意思)
- 触发器问题请教!
- 在Oracle数据库里要存储大的二进制数据包,如Winzip或Winrar压缩包,应选择何种数据类型的字段?在BCB6里如何录入?
- 最近思考的一个SQL执行问题?
- 关于一个存储过程,数据库高手请进来看看
ID PUP CONTENT
1 0 a 一级节点,不变
2 1 b 二级节点,不变
3 1 c 二级节点,不变
2 2 d 三级节点,ID变成它的PUP
2 2 e 三级节点,ID变成它的PUP
3 3 f 三级节点,ID变成它的PUP
3 3 g 三级节点,ID变成它的PUP
2 5 h 四级节点,ID变成它的PUP的PUP
2 5 j 四级节点,ID变成它的PUP的PUP
2 8 k 五级节点,ID变成它的PUP的PUP的PUP
level,
sys_connect_by_path(a,','),
decode(level,1,b,2,b,substr(sys_connect_by_path(a,','),instr(sys_connect_by_path(a,','),',',2)+1,1)),
t.*
from
(select 1 a,0 b,'a' from dual
union
select 2 a, 1 b, 'b' from dual
union
select 3 a, 1 b, 'c' from dual
union
select 4 a, 2 b, 'd' from dual
union
select 5 a, 2 b, 'e' from dual
union
select 6 a, 3 b, 'f' from dual
union
select 7 a, 3 b, 'g' from dual
union
select 8 a, 5 b, 'h' from dual
union
select 9 a, 5 b, 'j' from dual
union
select 10 a, 8 b, 'k' from dual ) t
connect by prior t.a = t.b
start with t.b=0
-------建立测试环境
create table Po(id int,pup int,content varchar(10))
insert into po select 1,0,'a'
union all select 2,1,'b'
union all select 3,1,'c'
union all select 4,2,'d'
union all select 5,2,'e'
union all select 6,3,'f'
union all select 7,3,'g'
union all select 8,5,'h'
union all select 9,5,'j'
union all select 10,8,'k'
---创建函数
create function pol(@id int)
returns int
as
begin
declare @t table(id int,pup int,lev int)
declare @i int
set @i=1
insert into @t select id,pup,@i from po where id in (select pup from po where id=@id)
while(@@rowcount>0)
begin
set @i=@i+1
insert into @t select b.id,b.pup,@i from @t a,po b where a.pup=b.id and a.lev=@i-1
end
declare @return int
declare @cnt int
select @cnt=count(*) from @t
if(@cnt>=2)
begin
select top 1 @return=id from (select top 2 * from @t order by lev desc)a order by lev
end
else
begin
set @return=@id
end
return @return
end------调用函数:
select dbo.pol(id),pup,content from po