1

Departmentという名前のテーブルがあり、3列:DepartmentIDDepartmentNameParentIDというテーブルがあります。ORDER BY MS SQL Serverストアドプロシージャを使用した子 - 親階層

は私がのParentIDや世代によって結果を注文したいの詳細

ためSQL Fiddleを参照してください。このように:
╔== == == ==╦== == == == == == == ==== == == == == === ==== = ══════╗
║║たchildID DepartmentName║║世代のParentID║
╠═════════╬════════════════╬══ ║║0 NULL║
║║6営業║║1 1║
║║7艦隊══════════╬══════════╣
║║1マネージャー║1║1║
║4║貨物║2║7║
║5║交通║2║7║
║2║IT║2║6║
║3║フード║2║6║
╚═════════╩═════ == == == == == ==== == == == ===

私は違うと試しましたが、どれもうまくいきませんでした。

私のストアドプロシージャ:

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

答えて

1

は、階層問合せのトップへパスを保存してみてください。

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); 
+0

コードがありません走るいくつかのSQL構文エラーがあります。 – milo2011

関連する問題