日期:2014-05-17  浏览次数:20425 次

求上下级关系的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



查询 :where id=1时:

;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