首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求上下级关系的sql 话语

2013-12-19 
求上下级关系的sql 语句id adname pid1广西02南宁13玉林14陆川35北流36中镇57宁明21\sql结果:where id1时

求上下级关系的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)
/*
idadname         pid
1广西              0
2广西南宁          1
3广西玉林          1
4广西玉林陆川      3
5广西玉林北流      3
6广西玉林北流中镇  5
7广西南宁宁明      2
*/

[解决办法]
或者我重新整理一下,第一个查询是你想得到某个id的下属所有值的汇总?

热点排行