Anda baik-baik saja - Anda cukup dekat :-)
Pada dasarnya, Anda perlu:
- tentukan forum awal yang akan dipilih sebelum CTE
- buat kueri "jangkar" ke forum yang ditentukan
- lalu ulangi semua anak dan jumlahkan
TopicCount
danReplyCount
penghitung
Jadi kode Anda akan terlihat seperti ini:
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
Tentu saja, Anda dapat membungkus ini ke dalam prosedur tersimpan yang akan mengambil ForumID
"root" awal sebagai parameter .