-- 查詢指定部門下面的全部部門, 並彙總各部門的下級部門數 DECLARE @Dept_name nvarchar(20) SET @Dept_name = N'MIS' ;WITH DEPTS AS( -- 查詢指定部門及其下的全部子部門 -- 定位點成員 SELECT * FROM Dept WHERE name = @Dept_name UNION ALL -- 遞歸成員, 經過引用CTE自身與Dept基表JOIN實現遞歸 SELECT A.* FROM Dept A, DEPTS B WHERE A.parent_id = B.id ), DEPTCHILD AS( -- 引用第1個CTE,查詢其每條記錄對應的部門下的全部子部門 SELECT Dept_id = P.id, C.id, C.parent_id FROM DEPTS P, Dept C WHERE P.id = C.parent_id UNION ALL SELECT P.Dept_id, C.id, C.parent_id FROM DEPTCHILD P, Dept C WHERE P.id = C.parent_id ), DEPTCHILDCNT AS( -- 引用第2個CTE, 彙總獲得各部門下的子部門數 SELECT Dept_id, Cnt = COUNT(*) FROM DEPTCHILD GROUP BY Dept_id ) SELECT -- JOIN第1,3個CTE,獲得最終的查詢結果 D.*, ChildDeptCount = ISNULL(DS.Cnt, 0) FROM DEPTS D LEFT JOIN DEPTCHILDCNT DS ON D.id = DS.Dept_id GO -- 刪除演示環境 DROP TABLE Dept 本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/fredrickhu/archive/2009/09/19/4569529.aspx