欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

求上下级关系的sql 话语

更新时间: 2014-01-05 02:18:21 责任编辑: Author_N1

 

求上下级关系的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的下属所有值的汇总?
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:18:21
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8293/
本文WWW.DOC100.NET DOC100.NET版权所有。