あなたは大丈夫です - あなたはかなり近づいています :-)
基本的に、次のことを行う必要があります:
- CTE の前に選択する最初のフォーラムを定義する
- 定義されたフォーラムへの「アンカー」クエリを作成する
- 次に、すべての子を反復処理し、
TopicCount
を合計します およびReplyCount
カウンター
したがって、コードは次のようになります:
DECLARE @RootForumID INT
SET @RootForumID = 1 -- or whatever you want...
;WITH CTE AS
(
-- define the "anchor" query - select the chosen forum
SELECT
ForumID, TopicCount, ReplyCount, LastPost
FROM
dbo.forums
WHERE
ForumID = @RootForumID
UNION ALL
-- select the child rows
SELECT
f.ForumID, f.TopicCount, f.ReplyCount, f.LastPost
FROM
dbo.forums f
INNER JOIN
CTE on f.ParentForumID = CTE.ForumID
)
SELECT
SUM(TopicCount) AS topics,
SUM(ReplyCount) AS replys,
MAX(LastPost) AS 'Latest Post'
FROM
CTE
もちろん、これを最初の「ルート」 ForumID
を取るストアド プロシージャにラップすることもできます。 パラメータとして .