sql >> Database >  >> RDS >> Sqlserver

Recursieve zoekopdracht met CTE - SUM van onderliggende kolommen voor een bepaalde ouder

Het gaat goed met je - je bent redelijk dichtbij :-)

In principe moet u:

  • definieer het eerste forum dat moet worden gekozen vóór de CTE
  • maak een "anker"-query naar dat gedefinieerde forum
  • herhaal dan alle kinderen en vat de TopicCount . samen en ReplyCount tellers

Dus je code zou er ongeveer zo uit moeten zien:

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

Je zou dit natuurlijk in een opgeslagen procedure kunnen opnemen die de initiële "root" ForumID zou nemen. als een parameter .




  1. Hoe dump je vanuit PostgreSQL in de database?

  2. BREAK-instructie in PL/pgSQL

  3. Hoe OdbcParameter voor MySQL te gebruiken?

  4. MySQL-tabel met vast aantal rijen?