使用 MS SQL 服务器存储过程的 ORDER BY child-parent hierarchy

ORDER BY child-parent hierarchy using MS SQL Server stored procedure

我有一个名为 Department 的 table,有 3 列:DepartmentIDDepartmentNameParentID

详情见SQL Fiddle

我想按 ParentID 和 Generation 对结果进行排序。像这样:
╔═════════╦════════════════╦════════════╦═════════ ═╗
║ ChildID ║ DepartmentName ║ Generation ║ ParentID ║
╠═════════╬════════════════╬════════════╬═════════ ═╣
║ 1 ║ 经理 ║ 0 ║ NULL ║
║ 6 ║ 销售额 ║ 1 ║ 1 ║
║ 7 ║ 舰队 ║ 1 ║ 1 ║
║ 4 ║ 货物 ║ 2 ║ 7 ║
║ 5 ║ 运输 ║ 2 ║ 7 ║
║ 2 ║ 它 ║ 2 ║ 6 ║
║ 3 ║ 食物 ║ 2 ║ 6 ║
╚═════════╩════════════════╩════════════╩═════════ ═╝

我尝试了不同的 ORDER BY,但 none 成功了。

我的存储过程:

WITH Hierarchy(ChildId, DeparmentName, Generation, ParentID)
AS
(
SELECT DepartmentID, DeparmentName, 0, ParentID
    FROM Departments AS FirtGeneration
    WHERE ParentID IS NULL 
UNION ALL
    SELECT NextGeneration.DepartmentID, NextGeneration.DeparmentName, Parent.Generation + 1, Parent.ChildId
        FROM Departments AS NextGeneration
        INNER JOIN Hierarchy AS Parent ON NextGeneration.ParentID = Parent.ChildId    
)
SELECT * FROM Hierarchy
OPTION(MAXRECURSION 32767)

我使用 MS SQL Server 2005

尝试将 路径 存储到分层查询的顶部:

WITH Hierarchy(ChildId, DeparmentName, Generation, ParentID, Path) AS (
      SELECT DepartmentID, DepartmentName, 0, ParentID,
             RIGHT('000' + CAST(DepartmentID as VARCHAR(MAX)), 3) as Path
      FROM Departments FirstGeneration
      WHERE ParentID IS NULL 
      UNION ALL
      SELECT NextGeneration.DepartmentID, NextGeneration.DeparmentName, Parent.Generation + 1, Parent.ChildId,
             Path + '-->' + CAST(RIGHT('000' + CAST(NextGeneration.DepartmentID as VARCHAR(MAX)), 3)
      FROM Departments NextGeneration INNER JOIN
           Hierarchy Parent
           ON NextGeneration.ParentID = Parent.ChildId    
     )
SELECT h.*
FROM Hierarchy h
ORDER BY path
OPTION(MAXRECURSION 32767);