2

特定の投稿にコメントしたり、日付順に親のすぐ下に返信を表示したりできるフォーラム設定を作成しようとしています。親の下にはサブレベルが1つだけあります。データセットの例は次のとおりです。

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 に答える