sql >> Databáze >  >> RDS >> Sqlserver

Vypočítat součet hodnot ve stromu (rekurzivní dotaz)

Váš pokus pomocí LEAD nebude fungovat, protože nesčítá všechny předchozí úrovně a jeho ID musí být sekvenční.

Nejprve rozložte celou hierarchii pro každého zaměstnance tak, aby každý zaměstnanec byl zahrnut jednou na úroveň hierarchie:

;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. načíst data z databáze mysql na základě typů dovolené, jako je zkouška, neplacená, roční

  2. Jak přeložit funkci PostgreSQL array_agg do SQLite?

  3. Výmaz CTE není potvrzen, dokud nebudou dokončeny následující příkazy

  4. Počet SQL - nefunguje