Het gaat goed met je - je bent redelijk dichtbij :-)
In principe moet u:
- definieer het eerste forum dat moet worden gekozen vóór de CTE
- maak een "anker"-query naar dat gedefinieerde forum
- herhaal dan alle kinderen en vat de
TopicCount
. samen enReplyCount
tellers
Dus je code zou er ongeveer zo uit moeten zien:
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
Je zou dit natuurlijk in een opgeslagen procedure kunnen opnemen die de initiële "root" ForumID
zou nemen. als een parameter .