Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête récursive avec CTE - SOMME des colonnes enfants pour un parent donné

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 et ReplyCount 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 .