求上下级关系的sql 语句
id adname pid
1 广西 0
2 南宁 1
3 玉林 1
4 陆川 3
5 北流 3
6 中镇 5
7 宁明 2
1\sql结果:where id=1时
id adname pid ppid
1 广西 0 1
2 南宁 1 2
3 玉林 1 3
4 陆川 3 3
5 北流 3 3
6 中镇 5 3
7 宁明 2 2
2\sql结果:where id=3 时
id adname pid
3 玉林 1
4 玉林陆川 3
5 玉林北流 3
6 玉林北流中镇 5
谢谢各位!
[解决办法]
建表语句:
create table tb(id int,adname varchar(20),pid int)
insert into tb
select 1 ,'广西', 0 union all
select 2 ,'南宁', 1 union all
select 3 ,'玉林', 1 union all
select 4 ,'陆川', 3 union all
select 5 ,'北流', 3 union all
select 6 ,'中镇', 5 union all
select 7 ,'宁明', 2
go
;with t
as
(
select id,adname as adname_t,pid,1 as level,
CAST(adname as varchar(max)) as adname,
cast(right('000'+cast(id as varchar),3) as varchar(max)) as sort
from tb
where id =1 --参数为:where id=1时
union all
select tb.id,tb.adname,tb.pID,level + 1 ,
cast(t.adname + tb.adname as varchar(max)),
cast(sort+right('000'+cast(tb.id as varchar),3) as varchar(max))
from t
inner join tb
on t.id = tb.pID
)
select id,adname,pid
from t
where exists(select 1 from t t1 where charindex(t1.sort,t.sort)>0)
/*
idadname pid
1广西 0
2广西南宁 1
3广西玉林 1
4广西玉林陆川 3
5广西玉林北流 3
6广西玉林北流中镇 5
7广西南宁宁明 2
*/