sql >> Databasteknik >  >> RDS >> Sqlserver

Rekursiv fråga med CTE - SUMMA av underordnade kolumner för en given förälder

Du mår bra - du är ganska nära :-)

I grund och botten behöver du:

  • definiera det första forumet som ska väljas före CTE
  • skapa en "ankare"-fråga till det definierade forumet
  • Iterera sedan över alla barn och summera TopicCount och ReplyCount räknare

Så din kod bör se ut ungefär så här:

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

Naturligtvis kan du linda in detta i en lagrad procedur som tar den initiala "roten" ForumID som en parameter .




  1. Hur man lägger till icke null-begränsning till befintlig kolumn i MySQL

  2. Slår ihop flera rader till en rad och flera kolumner på mysql

  3. Få polygoner nära en lat,long i MySQL

  4. Hur sorterar jag i den ordning som anges i SQL Server?