1

Ich habe eine Tabelle mit dem Namen Department mit 3 Spalten: DepartmentID, DepartmentName, ParentID.ORDER BY Kind-Eltern-Hierarchie mit MS SQL Server gespeicherte Prozedur

Siehe SQL Fiddle für Details

ich die Ergebnisse von ParentID and Generation bestellen möchten. So:
╔═════════╦════════════════╦════════════╦════ ══════╗
║ KindID ║ Abteilungsname ║ Generierung ║ ParentID ║
╠═════════╬════════════════╬══ ══════════╬══════════╣
║ 1 ║ Manager ║ 0 ║ NULL ║
║ 6 ║ Verkauf ║ 1 ║ 1 ║
║ 7 ║ Flotte ║ 1 ║ 1 ║
║ 4 ║ Fracht ║ 2 ║ 7 ║
║ 5 ║ Transport ║ 2 ║ 7 ║
║ 2 ║ IT ║ 2 ║ 6 ║
║ 3 ║ Lebensmittel ║ 2 ║ 6 ║
╚═════════╩═════ ═══════════╩════════════╩══════════╝

Ich probierte verschiedene ORDER BY s, aber keine funktionierte.

Meine gespeicherten Prozedur:

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) 

Ich benutze MS SQL Server 2005

Antwort

1

Versuchen Sie, die Pfad nach oben in die hierarchische Abfrage speichern:

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

Der Code funktioniert nicht Lauf. Es gibt einige SQL-Syntaxfehler. – milo2011

Verwandte Themen