您的位置:首页 > 数据库

关于T-SQL层级关系的思路

2012-03-25 22:45 218 查看
在项目中遇到了一个层级关系,情况如下,要在用户信息表中找到汇报给大区销售经理的员工信息(含汇报给大区销售经理的员工的员工),

1 及:大区销售经理

2级:汇报给大区销售经理的直接汇报对象

3级:汇报给2级的直接对象;

为了以后方便查找此资料,现在我把大区销售经理的id 看成2,T-SQL语句如下:

View Code

CREATE FUNCTION dbo.FnGetReports(@EmpolyeeID    AS INT)
RETURNS @Reports TABLE
(
EmployeeID    INT NOT NULL,
ReportToID    INT NULL
)
AS
BEGIN
DECLARE @Employee    INT;
INSERT INTO @Reports SELECT EmployeeID,ReportsTo FROM Employees WHERE EmployeeID=@EmpolyeeID;
SELECT @Employee=MIN(EmployeeID) FROM Employees WHERE ReportsTo=@EmpolyeeID;
WHILE @Employee IS NOT NULL
BEGIN
INSERT INTO @Reports SELECT * FROM dbo.FnGetReports(@Employee);
SELECT  @Employee = MIN(EmployeeID)
FROM  Employees
WHERE EmployeeID>@Employee
AND ReportsTo=@EmpolyeeID
END
RETURN
END
GO


调用方式:

DECLARE @EmployeeID    INT;
SELECT @EmployeeID = 2;
SELECT  ee.EmployeeID,ee.LastName+' '+ ee.FirstName,tt.LastName+' '+TT.FirstName AS 'ReportTo'
FROM Employees AS ee
INNER JOIN DBO.FnGetReports(@EmployeeID) AS aa ON ee.EmployeeID = aa.EmployeeID
INNER JOIN Employees tt ON tt.EmployeeID = aa.ReportToID
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐