Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie rekurencyjne z CTE - SUMA kolumn podrzędnych dla danego rodzica

Masz się dobrze - jesteś całkiem blisko :-)

Zasadniczo musisz:

  • zdefiniuj pierwsze forum, które zostanie wybrane przed CTE
  • utwórz zapytanie „zakotwiczające” do tego zdefiniowanego forum
  • następnie przeprowadź iterację wszystkich elementów podrzędnych i zsumuj TopicCount i ReplyCount liczniki

Twój kod powinien wyglądać mniej więcej tak:

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

Oczywiście, możesz owinąć to w procedurę składowaną, która przyjmie początkowy "root" ForumID jako parametr.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 sposoby na usunięcie zduplikowanych wierszy w SQL Server, ignorując klucz podstawowy

  2. Jak hostować witrynę z bazą danych ASPNETDB.MDF z serwera deweloperskiego na serwer produkcyjny?

  3. SQL Server, nie można wstawić wartości null do pola klucza podstawowego?

  4. SQL Server:Znajdź domyślną wartość kolumny z zapytaniem

  5. Linq To Sql i identity_insert