Hierarquia de Árvore do SQL Server e Conjuntos Aninhados com IDs de Registro Duplicados

Dado que eu tenho essa estrutura de resultados (campos supérfluos foram retirados)

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

é possível ter os registros retornados em ordem de árvore, ou seja,Parent entãoChildren, se umChild é umParent, então a suaChildren, se não entãoSibling, etc? Por exemplo,

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 */

A única maneira que eu posso pensar em fazer isso seria seguir este artigo -

Melhore o desempenho da hierarquia usando conjuntos aninhados

e incluir[LeftExtent] e[RightExtent] campos contra cada registro. Agora o SQL no artigo funciona bem quandoIds são únicos, mas nesta estrutura de árvore particular, um registro com o mesmoId pode aparecer em lugares diferentes dentro da árvoreParentId campo é diferente, obviamente). Eu acho que o problema está neste SQL do artigo -

  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) 

Como isso pode ser alterado para permitir registros com duplicadoIds a ser dado valores [LeftExtent] e [RightExtent], ou estou completamente perdendo uma maneira mais fácil de retornar o conjunto de resultados na ordem que eu preciso?

questionAnswers(3)

yourAnswerToTheQuestion