SQL中基于父子连接的排序结果

SQL中基于父子连接的排序结果,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张有如下结构的桌子。最后一列parentID显然是与另一行的连接。如果不存在父级,则将为0。但不会有第三层次。这意味着,如果一行有任何父行,它将永远不会容纳任何子行 ID | Test Name | ParentID ------------------------------------- 1 | A | 0 2 | B | 0 3 | Z

我有一张有如下结构的桌子。最后一列parentID显然是与另一行的连接。如果不存在父级,则将为0。但不会有第三层次。这意味着,如果一行有任何父行,它将永远不会容纳任何子行

ID    |   Test Name    |    ParentID
-------------------------------------
1     |      A         |       0
2     |      B         |       0
3     |      Z         |       2
4     |      L         |       2
5     |      D         |       2
6     |      E         |       0
7     |      Q         |       2
8     |      R         |       6
9     |      S         |       2
10    |      J         |       6
-----------------------------------------------
希望结构清晰。因此,我需要一个查询,该查询将返回所有行,但将根据testname对所有行进行排序,但也必须保留层次结构

因此,查询的结果应该是

ID    |   Test Name    |    ParentID
-------------------------------------
1     |      A         |       0
2     |      B         |       0
5     |      D         |       2
4     |      L         |       2
7     |      Q         |       2
9     |      S         |       2
3     |      Z         |       2
6     |      E         |       0
10    |      J         |       6
8     |      R         |       6
-----------------------------------------------
order by case when ParentID = 0
           then ID
           else ParentID
         end,
         ParentID,
         [Test Name]