Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Рекурсивна заявка с CTE - SUM на дъщерни колони за даден родител

Справяш се - съвсем си близо :-)

По принцип трябва да:

  • дефинирайте първоначалния форум, който да бъде избран преди CTE
  • създайте заявка за „котва“ към този дефиниран форум
  • след това повторете всички деца и обобщете TopicCount и ReplyCount броячи

Така че вашият код трябва да изглежда по следния начин:

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

Разбира се, можете да опаковате това в съхранена процедура, която ще вземе първоначалния "root" ForumID като параметър .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли заобиколно решение за активиране на FILESTREAM в първия подход на кода на рамката на обекта

  2. Разлика между sys.views, sys.system_views и sys.all_views в SQL Server

  3. Изчислете сумата от дата и час в HH:MM:SS в sql

  4. изчисляване на фискалната година в изявление за избор на sql?

  5. Неправилен синтаксис близо до „OFFSET“ modift sql comm 2012 до 2008