sql >> Databáze >  >> RDS >> Sqlserver

Rekurzivní dotaz s CTE – SOUČET podřízených sloupců pro daného rodiče

Jde ti to dobře - jsi docela blízko :-)

V zásadě potřebujete:

  • definujte počáteční fórum, které bude vybráno před CTE
  • vytvořte "ukotvovací" dotaz pro toto definované fórum
  • pak iterujte přes všechny podřízené položky a sečtěte TopicCount a ReplyCount čítače

Váš kód by tedy měl vypadat nějak takto:

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

Samozřejmě to můžete zabalit do uložené procedury, která by převzala počáteční "root" ForumID jako parametr .




  1. emulující substring_index() MySQL v PGSQL

  2. Jak vytvořit složený primární klíč v SQL Server 2008

  3. Oprava „ERROR 1054 (42S22):Neznámý sloupec „…“ v „klauzuli objednávky“ při použití UNION v MySQL

  4. Laravel 'nemohl najít ovladač (SQL:vložit do...'