具有 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.10
在 2.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)
我有一个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.10
在 2.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)