数据库表部门表department(id integer,pid integer,name string)
部门表里存若干级部门
一级部门
二级部门
三级部门
。
员工表 employee(id integer,pid integer,name string,qita string)
pid是部门编号
现在想查找某一级部门下的所有员工信息,包括子部门
sql语句怎么写,部门没有级别限制,有可能有5级,也有可能有8级,是不是需要用递归,请教各位高手
部门表里存若干级部门
一级部门
二级部门
三级部门
。
员工表 employee(id integer,pid integer,name string,qita string)
pid是部门编号
现在想查找某一级部门下的所有员工信息,包括子部门
sql语句怎么写,部门没有级别限制,有可能有5级,也有可能有8级,是不是需要用递归,请教各位高手
解决方案 »
- 找人转换一个小程序的代码,VS C++转换为D【可付费】
- 如何实现DBGrid滑动条位置的控制?
- 繁体操作系统简体转换成繁体
- 我想将一个软件如acdsee封装到我的程序里,然后可以在我的程序里面按我的要求让它工作,如何入手呢?
- 注册问题
- 调用asp.net web service时碰到的中文字符问题
- 高分求助:如何安装ODAC控件??在线等。急急急。搞定即可送分
- 表的问题?
- 如何实现:如果目录下有文件就删除目录下所有文件
- Canvas.LineTo(42+5*(sin(0)),40+5*(cos(0)));為什麼出錯?
- 【求教高手,如何给report machine中的 memo动态赋值】
- FTP自动更新程序,怎样把ini文件集成到程序内部。(在线等)
from emplyee
where pid in(select pid from department)你丢点测试数据看看,估计我这个写法有问题
declare @t table(id varchar(10),Name varchar(10), parentId varchar(10))
insert into @t values('001', 'A' , null)
insert into @t values('002', 'B' , '001')
insert into @t values('003', 'C' , '001')
insert into @t values('004', 'D' , null)
insert into @t values('005', 'E' , '002')
insert into @t values('006', 'F' , '004')
insert into @t values('007', 'G' , '003')
declare @restlt table(id varchar(10),Name varchar(10), parentId varchar(10),path varchar(1000))insert into @restlt
select id,Name,parentId,id from @t where parentId is null or parentId not in (select id from @t )while exists(select * from @t as a,@restlt as b where a.parentId=b.id and a.id not in (select id from @restlt)
)
insert into @restlt
select a.*, b.path+'/'+a.id from @t as a,@restlt as b where a.parentId=b.id and a.id not in (select id from @restlt)select * from @restlt order by path,id
id Name parentId path
001 A NULL 001
002 B 001 001/002
005 E 002 001/002/005
003 C 001 001/003
007 G 003 001/003/007
004 D NULL 004
006 F 004 004/006
sql 2005 用 withUSE AdventureWorks;
GO
WITH DirectReports(ManagerID, EmployeeID, EmployeeLevel) AS
(
SELECT ManagerID, EmployeeID, 0 AS EmployeeLevel
FROM HumanResources.Employee
WHERE ManagerID IS NULL
UNION ALL
SELECT e.ManagerID, e.EmployeeID, EmployeeLevel + 1
FROM HumanResources.Employee e
INNER JOIN DirectReports d
ON e.ManagerID = d.EmployeeID
)
SELECT ManagerID, EmployeeID, EmployeeLevel
FROM DirectReports ;
GO
. 使用递归公用表表达式显示层次列表
以下示例在示例 C 的基础上添加经理和雇员的名称,以及他们各自的头衔。通过缩进各个级别,突出显示经理和雇员的层次结构。 复制代码
USE AdventureWorks;
GO
WITH DirectReports(Name, Title, EmployeeID, EmployeeLevel, Sort)
AS (SELECT CONVERT(varchar(255), c.FirstName + ' ' + c.LastName),
e.Title,
e.EmployeeID,
1,
CONVERT(varchar(255), c.FirstName + ' ' + c.LastName)
FROM HumanResources.Employee AS e
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
WHERE e.ManagerID IS NULL
UNION ALL
SELECT CONVERT(varchar(255), REPLICATE ('| ' , EmployeeLevel) +
c.FirstName + ' ' + c.LastName),
e.Title,
e.EmployeeID,
EmployeeLevel + 1,
CONVERT (varchar(255), RTRIM(Sort) + '| ' + FirstName + ' ' +
LastName)
FROM HumanResources.Employee as e
JOIN Person.Contact AS c ON e.ContactID = c.ContactID
JOIN DirectReports AS d ON e.ManagerID = d.EmployeeID
)
SELECT EmployeeID, Name, Title, EmployeeLevel
FROM DirectReports
ORDER BY Sort;
GO