Tu vas bien - tu es assez proche :-)
En gros, vous devez :
- définir le forum initial à sélectionner avant le CTE
- créer une requête "ancre" sur ce forum défini
- puis itérer sur tous les enfants et résumer le
TopicCount
etReplyCount
compteurs
Votre code devrait donc ressembler à ceci :
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
Bien sûr, vous pouvez encapsuler cela dans une procédure stockée qui prendrait la "racine" initiale ForumID
comme paramètre .