Du machst das gut - du bist ganz nah dran :-)
Grundsätzlich müssen Sie:
- definieren Sie das anfängliche Forum, das vor dem CTE ausgewählt werden soll
- Erstellen Sie eine "Anker"-Abfrage zu diesem definierten Forum
- Durchlaufen Sie dann alle Kinder und summieren Sie den
TopicCount
undReplyCount
Zähler
Ihr Code sollte also etwa so aussehen:
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
Natürlich könnten Sie dies in eine gespeicherte Prozedur einpacken, die die anfängliche "Root" ForumID
nehmen würde als Parameter .