再求一个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;