|
--建立測試資料表 |
|
DECLARE @tbl_Dept TABLE ( |
|
UniqueID int IDENTITY, |
|
DeptID varchar(50), |
|
DeptName varchar(100), |
|
ParentDeptID varchar(50) |
|
) |
|
--建立測試資料 |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('A1','董事長',NULL) |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('B1','資訊部','A1') |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('B2','會計部','A1') |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('B3','總務部','A1') |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('C1','系統應用課','B1') |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('C2','系統開發課','B1') |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('C3','網路管理課','B1') |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('C4','成本課','B2') |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('C5','會計課','B2') |
|
INSERT INTO @tbl_Dept (DeptID,DeptName,ParentDeptID) VALUES ('C6','人事課','B3') |
|
|
|
--列出部門階層 |
|
;WITH DEPT_CTE(DeptID,DeptName,Path,Degree) AS |
|
( |
|
SELECT DeptID,DeptName,CAST(DeptName AS nvarchar(max)), 0 AS Degree |
|
FROM @tbl_Dept |
|
WHERE ParentDeptID IS NULL |
|
UNION ALL |
|
SELECT D.DeptID,D.DeptName,CAST(DC.Path + ' > ' + D.DeptName AS nvarchar(max)),Degree + 1 |
|
FROM @tbl_Dept D |
|
INNER JOIN DEPT_CTE DC |
|
ON D.ParentDeptID = DC.DeptID |
|
) |
|
SELECT * FROM Dept_CTE ORDER BY Degree |