T-SQL 递归查询示例

1. 数据库表创建

-- Create an Employee table.
CREATE TABLE dbo.MyEmployees
(
	EmployeeID smallint NOT NULL,
	FirstName nvarchar(30)  NOT NULL,
	LastName  nvarchar(40) NOT NULL,
	Title nvarchar(50) NOT NULL,
	DeptID smallint NOT NULL,
	ManagerID int NULL,
 CONSTRAINT PK_EmployeeID PRIMARY KEY CLUSTERED (EmployeeID ASC) 
);
-- Populate the table with values.
INSERT INTO dbo.MyEmployees VALUES 
 (1, N'Ken', N'Sánchez', N'Chief Executive Officer',16,NULL)
,(273, N'Brian', N'Welcker', N'Vice President of Sales',3,1)
,(274, N'Stephen', N'Jiang', N'North American Sales Manager',3,273)
,(275, N'Michael', N'Blythe', N'Sales Representative',3,274)
,(276, N'Linda', N'Mitchell', N'Sales Representative',3,274)
,(285, N'Syed', N'Abbas', N'Pacific Sales Manager',3,273)
,(286, N'Lynn', N'Tsoflias', N'Sales Representative',3,285)
,(16,  N'David',N'Bradley', N'Marketing Manager', 4, 273)
,(23,  N'Mary', N'Gibson', N'Marketing Specialist', 4, 16);


2.查询语句

SELECT * FROM myemployees


;WITH CTE AS(
SELECT 
E.EmployeeID AS baseEmployeeID,
E.EmployeeID,
E.ManagerID,
0 AS level
FROM MyEmployees E


UNION All
    
SELECT
T.baseEmployeeID,
P.EmployeeID,
P.ManagerID,
T.level + 1
FROM CTE T
INNER JOIN MyEmployees P
ON T.ManagerID = P.EmployeeID
)


SELECT * FROM CTE
--WHERE managerId = 1
ORDER BY CTE.baseEmployeeID, level

你可能感兴趣的:(数据库/LINQ)