Bạn đang làm tốt - bạn khá gần :-)
Về cơ bản, bạn cần:
- xác định diễn đàn ban đầu sẽ được chọn trước CTE
- tạo một truy vấn "neo" cho diễn đàn đã xác định
- sau đó lặp lại trên tất cả các phần tử con và tổng hợp
TopicCount
vàReplyCount
quầy
Vì vậy, mã của bạn sẽ trông giống như sau:
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
Tất nhiên, bạn có thể gói nó vào một thủ tục được lưu trữ sẽ lấy "root" ForumID
ban đầu như một tham số.