Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn đệ quy với CTE - SUM của các cột con cho một phụ huynh nhất định

Bạn đang làm tốt - bạn khá gần :-)

Về cơ bản, bạn cần:

  • xác định diễn đàn ban đầu sẽ được chọn trước CTE
  • tạo một truy vấn "neo" cho diễn đàn đã xác định
  • sau đó lặp lại trên tất cả các phần tử con và tổng hợp TopicCountReplyCount quầy

Vì vậy, mã của bạn sẽ trông giống như sau:

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

Tất nhiên, bạn có thể gói nó vào một thủ tục được lưu trữ sẽ lấy "root" ForumID ban đầu như một tham số.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. khóa ngoại và vấn đề chỉ mục

  2. Làm cách nào để tìm cột nào không có bất kỳ dữ liệu nào (tất cả các giá trị đều là NULL)?

  3. nếu tôi muốn tìm những gì đang tham chiếu đến một đối tượng trong SQL Server, việc tìm kiếm đồng bộ hóa có toàn diện không?

  4. Tách chuỗi thông qua câu lệnh chọn

  5. Độ chính xác của kiểu dữ liệu SYSDATETIME trong SQL Server