读书人

求上下级关系的sql 话语

发布时间: 2013-12-19 00:33:34 作者: rapoo

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

读书人网 >SQL Server

热点推荐