sql >> データベース >  >> RDS >> Sqlserver

CTE を使用した再帰クエリ - 特定の親の子列の合計

    あなたは大丈夫です - あなたはかなり近づいています :-)

    基本的に、次のことを行う必要があります:

    • 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
    

    もちろん、これを最初の「ルート」 ForumID を取るストアド プロシージャにラップすることもできます。 パラメータとして .




    1. Windows 10にMySQLをインストールするにはどうすればいいですか? –MySQLをインストールするためのワンストップソリューション

    2. MySQL-CONCAT-文字列を連結して変数として使用する方法はありますか?

    3. MySQLフィールドの先頭と末尾の空白を削除するにはどうすればよいですか?

    4. Word文書をアップロードし、それをmysqlに保存して、表示します