Jerarquía de árbol de SQL Server y conjuntos anidados con ID de registro duplicados

Dado que tengo esta estructura de conjunto de resultados (los campos superfluos han sido eliminados)

Id | ParentId | Name | Depth
----------------------------

es posible tener los registros devueltos en orden de árbol, es decir,Parent entoncesChildren, si unChild es unParent, entonces suChildren, si no entoncesSibling, etc? Por ejemplo,

Id | ParentId | Name | Depth
----------------------------
1    NULL       Major    1
2    1          Minor    2
3    1          Minor    2
4    3          Build    3
5    3          Build    3
6    1          Minor    2

/* etc, etc */

La única forma en que puedo pensar en hacer esto sería seguir este artículo:

Mejora el rendimiento de la jerarquía utilizando conjuntos anidados

e incluir[LeftExtent] y[RightExtent] campos contra cada registro. Ahora el SQL en el artículo funciona bien cuandoIds son únicos, pero en esta estructura de árbol particular, un registro con el mismoId pueden aparecer en diferentes lugares dentro del árbol (elParentId campo es diferente, obviamente). Creo que el problema está en este SQL del artículo -

  INSERT INTO @tmpStack
    (
      EmployeeID, 
      LeftExtent
    )
  SELECT TOP 1 EmployeeID, @counter 
  FROM Employee 
  WHERE ISNULL(ParentID, 0) = ISNULL(@parentid,0) 
  /* If the Id has already been added then record is not given [LeftExtent] or [RightExtent] values. */
  AND EmployeeID NOT IN (SELECT EmployeeID FROM @tmpStack) 

¿Cómo se puede alterar esto para permitir registros con duplicados?Ids ¿Se me darán los valores de [LeftExtent] y [RightExtent], o me falta una forma más fácil de devolver el conjunto de resultados en el orden que necesito?

Respuestas a la pregunta(3)

Su respuesta a la pregunta