Справяш се - съвсем си близо :-)
По принцип трябва да:
- дефинирайте първоначалния форум, който да бъде избран преди 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
Разбира се, можете да опаковате това в съхранена процедура, която ще вземе първоначалния "root" ForumID
като параметър .