sql >> Base de Datos >  >> RDS >> Sqlserver

Consulta recursiva con CTE:SUMA de columnas secundarias para un padre dado

Lo estás haciendo bien, estás bastante cerca :-)

Básicamente, necesitas:

  • definir el foro inicial que se elegirá antes del CTE
  • crear una consulta de "anclaje" a ese foro definido
  • luego iterar sobre todos los elementos secundarios y resumir el TopicCount y ReplyCount contadores

Entonces su código debería verse así:

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

Por supuesto, podría envolver esto en un procedimiento almacenado que tomaría la "raíz" inicial ForumID como parámetro .