请教一个小问题,如何搜索下级部门的人员?
表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(@