आप ठीक कर रहे हैं - आप काफी करीब हैं :-)
मूल रूप से, आपको यह करना होगा:
- सीटीई से पहले चुने जाने वाले प्रारंभिक फ़ोरम को परिभाषित करें
- निर्धारित फ़ोरम के लिए "एंकर" क्वेरी बनाएं
- फिर सभी बच्चों पर पुनरावृति करें और
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
लेगी एक पैरामीटर के रूप में।