Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kueri rekursif dengan CTE - SUM kolom anak untuk induk tertentu

Anda baik-baik saja - Anda cukup dekat :-)

Pada dasarnya, Anda perlu:

  • tentukan forum awal yang akan dipilih sebelum CTE
  • buat kueri "jangkar" ke forum yang ditentukan
  • lalu ulangi semua anak dan jumlahkan TopicCount dan ReplyCount penghitung

Jadi kode Anda akan terlihat seperti ini:

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

Tentu saja, Anda dapat membungkus ini ke dalam prosedur tersimpan yang akan mengambil ForumID "root" awal sebagai parameter .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tampilan SQL Penjualan Tanggal Paralel

  2. Cara mendapatkan catatan terakhir per grup dalam SQL

  3. Pemicu Asinkron di SQL Server 2005/2008

  4. kesalahan terjadi saat membuat koneksi ke SQL Server

  5. Hapus catatan SQL Server 2005 tanpa masuk