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

ツリー内の値の合計を計算する (再帰クエリ)

    LEAD を使用した試み 以前のすべてのレベルを合計するわけではなく、ID が連続している必要があるため、機能しません。

    各従業員が階層レベルごとに 1 回含まれるように、最初に各従業員の完全な階層を展開します。

    ;WITH cte 
    AS
    (
      SELECT e.ID, e.Name, e.ID as sub_ID 
      FROM @Employees e
      -- no WHERE-condition to get all employees
      UNION ALL
      SELECT 
         c.ID, c.Name -- keep the initial employee
         ,e.ID as sub_ID
      FROM @Employees e
        INNER JOIN cte c ON c.sub_ID = e.ParentID
    )
    
    SELECT 
         c.ID
        ,c.Name
        -- parent level
        ,sum(case when c.id =  s.EmployeeID then s.Quantity else 0 end) AS ParentSumSales
        -- child level
        ,sum(case when c.id <> s.EmployeeID then s.Quantity else 0 end) AS ChildSumSales
    FROM cte c
    LEFT JOIN @Sales as s
    ON s.EmployeeID = c.sub_ID
    group by c.Name, c.id
      

    1. AmazonMySQLRDS証明書を入手する方法

    2. SpringBootテスト用のEmbeddedPostgres

    3. MySQL InsertSelect-NOTNULLフィールド

    4. MySQLINT主キーのインデックスの再作成とAUTO_INCREMENTのリセット