2

我正在尝试创建一个论坛设置,您可以在其中评论特定帖子并让回复按日期顺序立即显示在父级下方。在父级之下只会有一个子级。这是示例数据集:

ID.ParentID.Datestamp
12.NULL.2013-03-01 1:00pm
13.NULL.2013-03-01 2:00pm
14.12.2013-03-01 2:20pm
15.12.2013-03-01 2:30pm
16.NULL.2013-03-01 3:30pm

这就是我想要得到的结果:

12.NULL.2013-03-01 1:00pm
14.12.2013-03-01 2:20pm
15.12.2013-03-01 2:30pm
13.NULL.2013-03-01 2:00pm
16.NULL.2013-03-01 3:30pm

我知道我需要某种 CTE,但这不会在适当的父级下对孩子进行排序(显然,因为没有 ORDER BY 子句);我无法弄清楚正确的顺序。谁能提供一些见解?

; WITH Messages
AS 
(
    SELECT ID, ParentID, Datestamp
    FROM ForumMessages
    WHERE ParentID IS NULL

    -- Recursive
    UNION ALL 
    SELECT
        t2.ID, t2.ParentID, t2.Datestamp
    FROM
        ForumMessages AS t2
        JOIN Messages AS m ON t2.ParentID = m.ID
)

SELECT ID, ParentID, Datestamp
FROM Messages
4

2 回答 2

3

对于单级深度,您不需要使用递归 - 尝试:

SELECT ID, ParentID, Datestamp
FROM ForumMessages
order by coalesce(ParentID,ID), Datestamp
于 2013-03-07T13:02:21.703 回答
0

没有 CTE 的非常简单的方法(ISNULL 是 MSSQL 中的函数,但您不提供 RDBMS):

SELECT ID, ParentID, Datestamp

FROM ForumMessages

ORDER BY ISNULL(ParentID,ID), DateStamp

小提琴

于 2013-03-07T13:08:54.770 回答