当前位置: 代码迷 >> Sql Server >> 求上下级关系的sql 语句解决方法
  详细解决方案

求上下级关系的sql 语句解决方法

热度:43   发布时间:2016-04-24 18:59:57.0
求上下级关系的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,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)
/*
id adname          pid
1 广西               0
2 广西南宁           1
3 广西玉林           1
4 广西玉林陆川       3
5 广西玉林北流       3
6 广西玉林北流中镇   5
7 广西南宁宁明       2
*/

------解决方案--------------------
或者我重新整理一下,第一个查询是你想得到某个id的下属所有值的汇总?
  相关解决方案