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

再sql语句,多谢

2014-01-26 
再求一个sql语句,谢谢。表a指标序号名称 上级指标1xx02yy03ii14oo15zz36tt3表b序号分组名指标序号(与表a指

再求一个sql语句,谢谢。
表a

指标序号  名称 上级指标
1         xx    0
2         yy    0
3         ii    1
4         oo    1
5         zz    3
6         tt    3

表b
序号  分组名  指标序号(与表a指标序号关联)
1     考核组    5
2     考核组   6

给出的条件是“考核组”,求出相关联的指标序号及其上级序号,
结果就是
指标序号   名称
1         xx    
3         ii    
5         zz    
6         tt    






[解决办法]

--SQL2000
SET NOCOUNT ON 
DECLARE @a TABLE(指标序号 int,名称 VARCHAR(20), 上级指标 int)
insert @a select 1         ,'xx',    0
union all select 2         ,'yy',    0
union all select 3         ,'ii',    1
union all select 4         ,'oo',    1
union all select 5         ,'zz',    3
union all select 6         ,'tt',    3
DECLARE @b TABLE(序号 int,  分组名 varchar(20),  指标序号 int)
insert @b select 1     ,'考核组',    5
union all select 2     ,'考核组',   6

DECLARE @c TABLE(指标序号 int,名称 VARCHAR(20), 上级指标 int)
INSERT @c SELECT * FROM @a WHERE 指标序号 in(select 指标序号 from @b where 分组名='考核组')

WHILE @@rowcount>0
INSERT @c SELECT * FROM @a WHERE 指标序号 in(select 上级指标 from @c) and 指标序号 not in(select 指标序号 from @c)
SELECT * from @c ORDER BY  指标序号
/*指标序号        名称                   上级指标        
----------- -------------------- ----------- 
1           xx                   0
3           ii                   1
5           zz                   3
6           tt                   3
*/

[解决办法]

--Data
create  TABLE #a(指标序号 int,名称 VARCHAR(20), 上级指标 int)
insert #a select 1         ,'xx',    0
union all select 2         ,'yy',    0
union all select 3         ,'ii',    1
union all select 4         ,'oo',    1
union all select 5         ,'zz',    3
union all select 6         ,'tt',    3

create TABLE #b(序号 int,  分组名 nvarchar(20),  指标序号 int)
insert #b select 1     ,N'考核组',    5


union all select 2     ,N'考核组',   6

--Query
;with t as
(
select *
from #a where 指标序号 in(select 指标序号 from #b where [分组名]=N'考核组')
union all
select a.*
from t join #a a
on t.上级指标=a.指标序号
)
select distinct *
from t;

热点排行