日期:2014-05-18  浏览次数:20537 次

请教一个小问题,如何搜索下级部门的人员?
表DEPT
dept_id   super_dept_id(父部门)   dept_id
      1                     0                                     总公司
      2                     1                                     广东公司
      3                     2                                     广州分公司
      4                     2                                     深圳分公司
----
表:人员表STAFF
staff_id   staff_dept     staff_name
      1                     3                     刘德华
      2                     4                     张靓影
      3                     2                     周星星
...
在存储过程中,如何搜索到X部门下的所有下级部门的人员,如:
点广东公司,能把广州和深圳分公司的人员都查找出来.

------解决方案--------------------
create table A(dept_id int,super_dept_id int ,dept_name varchar(10))
insert into A values(1,0, '总公司 ')
insert into A values(2,1, '广东公司 ')
insert into A values(3,2, '广州分公司 ')
insert into A values(4,2, '深圳分公司 ')
create table B(staff_id int,staff_dept int, staff_name varchar(10))
insert into B values(1,3, '刘德华 ')
insert into B values(2,4, '张靓影 ')
insert into B values(3,2, '周星星 ')
go

declare @dept_id as int
set @dept_id = 1

select B.* from B where staff_dept in
(
Select A.dept_id from A where super_dept_id = @dept_id
union all
select A.dept_id from A where super_dept_id in (Select A.dept_id from A where super_dept_id = @dept_id)
)

drop table A,B

/*
staff_id staff_dept staff_name
----------- ----------- ----------
1 3 刘德华
2 4 张靓影
3 2 周星星

(所影响的行数为 3 行)
*/

------解决方案--------------------
Create proc [dbo].[Get]
(
@Part int)
as
begin
select staff_name from STAFF join left DEPT where DEPT.super_dept_id> @Part or DEPT.super_dept_id=@Part
end

------解决方案--------------------
dept_id super_dept_id(父部门) dept_id
1 0 总公司
2 1 广东公司
3 2 广州分公司
4 2

create function dbo.uf_getpath(@parentID int)
returns varchar(1000)
as
begin
declare @s varchar(1000),@id varchar(64)
set @s = ' '
select @ID = super_dept_id from test where dept_id = @parentID
while @@rowcount > 0 and @ID <> 0
begin
set @s = @s+rtrim(reverse(@