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

SQLのツリーのような構造のデータを子から親に合計するにはどうすればよいですか?

    これで完全なレポートが得られます

    SELECT t1.DEPARTMENT_ID
         , t1.PARENT_DEP_ID
         , t1.DEPARTMENT   
         , Sum(t2.Amount) Amount
    FROM   TREE_DATA t1
           INNER JOIN TREE_DATA t2 
           ON t1.DEPARTMENT = SUBSTR(t2.DEPARTMENT, 1, LENGTH(t1.DEPARTMENT))
    WHERE  t1.Amount = 0
    GROUP BY t1.DEPARTMENT_ID, t1.PARENT_DEP_ID, t1.DEPARTMENT
    
    UNION ALL
    
    SELECT DEPARTMENT_ID
         , PARENT_DEP_ID
         , DEPARTMENT   
         , Amount
    FROM   TREE_DATA
    WHERE  Amount > 0
    ORDER BY DEPARTMENT
    

    最初のクエリは、金額なしでoensの部門名の構造をハッキングすることによってローリングサムを取得し、2番目のクエリはリーフを取得します。
    最初のクエリは、グループ化されるため、リーフを表示できません。同じ順序になる列の組み合わせが見つかった場合、リーフは順序付けられていないようです。

    SQLFiddle デモ

    再帰的なCTEを書こうとしました 、ただし、SUMなどの集計関数を使用することはできません。 その中に。



    1. メッセージテーブルからの会話のクエリ

    2. 一部のユーザーは、mysqlに複数の個別のレコードを持っています

    3. Rails-重複するオブジェクトのオブジェクトを取得します

    4. SQLServer-Windows認証で接続します