日期:2014-05-19  浏览次数:20681 次

求一复杂查询语句~~~~~~~~急~~~~~~~~~~
表1
user(员工)           dept(部门)
张三                           it部
李四                           人事科
小王                           第一产品科

注:人事科属于行政部

表2
dept_name(子部门)                 dept_parent(主部门)
it部                                                 it中心  
人事科                                             行政部  
行政部                                             行政中心
第一产品科                                     第一产品软件部
第一产品软件部                             第一产品部
第一产品部                                     研发中心  


问题是   sql语句怎么写,才能知道这个人属于那个   中心
查出的结果是
user                               dept_parent
张三                                 it中心
李四                                 行政中心
小王                                   研发中心  



------解决方案--------------------
楼上的忽视了部门的父子结构.
------解决方案--------------------
create function f_getParent(@child varchar(20))
returns varchar(30)
as
begin
while exists(select 1 from t2 where dept_name=@child and dept_parent <> ' ')
select @child=dept_parent from t2 where dept_name=@child
return @child
end
go

create table t1([user] varchar(20),dept varchar(20))
insert t1 select '张三 ', 'it部 '
union all select '李四 ', '人事科 '
union all select '小王 ', '第一产品科 '

create table t2(dept_name varchar(30),dept_parent varchar(30))
insert t2 select 'it部 ', 'it中心 '
union all select '人事科 ', '行政部 '
union all select '行政部 ', '行政中心 '
union all select '第一产品科 ', '第一产品软件部 '
union all select '第一产品软件部 ', '第一产品部 '
union all select '第一产品部 ', '研发中心 '

select [user],dept_parent=dbo.f_getParent(dept) from t1

drop table t1,t2
drop function f_getParent

user dept_parent
-------------------- ------------------------------
张三 it中心
李四 行政中心
小王 研发中心

(所影响的行数为 3 行)