具有 ASC 子行的 DESC 父行

DESC parent rows with ASC children rows

我有一个table

Date   MainID    ParentID   SubID
====   ======    ========   =====
4/03   1         NULL       1
4/05   2         NULL       2
4/10   3         2          2.1
4/11   4         1          1.1
4/12   5         2          2.2 

我试图通过父节点的 DESC 日期获取结果,但对于子节点,我尝试通过 ASC 子 ID 获取结果。 比如我想要

Date   MainID    ParentID   SubID
====   ======    ========   =====
4/05   2         NULL       2
4/10   3         2          2.1
4/12   5         2          2.2
4/03   1         NULL       1
4/11   4         1          1.1

Group By 是否可行,还是更复杂?

有几种可能性可以这样做,这里是一个简单的例子:

select *
from t
order by
COALESCE(ParentId, MainId) DESC, SubID ASC

此查询假定较新的行将具有较高的 MainId,因此您不是按日期排序,而是按 desc ord 中的父 ID 排序

样本fiddlehttp://sqlfiddle.com/#!6/40fa7/4

一种不对日期和 ID 之间的相关性做出假设并且不会像 2.102.2

之前对字符串进行排序的方法
SELECT c.*
FROM   Table1 c
       LEFT JOIN Table1 p
         ON c.SubID LIKE CAST(p.MainID AS VARCHAR(10)) + '._%'
ORDER  BY isnull(p.Date, c.Date) DESC,
          CAST('/' + c.SubID + '/' AS HIERARCHYID)