Are you sure you have the correct output?DECLARE @Sample TABLE ( ParentID CHAR(10) NOT NULL, ChildID CHAR(10) NOT NULL )INSERT @SampleVALUES ('0000000000', '0000000001'), ('0000000000', '0000000124'), ('0000000000', '0000007953'), ('0000007953', '0000007954'), ('0000007954', '0000007955'), ('0000007954', '0000007956'), ('0000007957', '0000007958'), ('0000007958', '0000007959'), ('0000007958', '0000007960'), ('0000007958', '0000007961');WITH cteSource(ParentID, ChildID, PathID, Iteration)AS ( SELECT DISTINCT CAST(NULL AS CHAR(10)) AS ChildID, ParentID, CAST('/' + ChildID AS VARCHAR(MAX)) AS PathID, CAST(0 AS INT) AS Iteration FROM @Sample UNION ALL SELECT s.ParentID, s.ChildID, c.PathID + '/' + CAST(s.ChildID AS VARCHAR(MAX)) AS PathID, c.Iteration + 1 AS Iteration FROM cteSource AS c INNER JOIN @Sample AS s ON s.ParentID = c.ChildID)SELECT REPLICATE('-', 10 * Iteration) + ChildIDFROM cteSourceGROUP BY REPLICATE('-', 10 * Iteration) + ChildIDORDER BY MIN(PathID)
N 56°04'39.26"E 12°55'05.63"