sql >> Database >  >> RDS >> Sqlserver

Bereken som van waarden in boom (recursieve query)

Uw poging met LEAD zal niet werken omdat het niet alle voorgaande niveaus optelt en de ID's opeenvolgend moeten zijn.

Explodeer eerst de volledige hiërarchie voor elke werknemer, zodat elke werknemer één keer per hiërarchieniveau wordt opgenomen:

;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. java.sql.SQLRecoverableException:de netwerkadapter kan de verbinding niet tot stand brengen

  2. Rails 3.0.3 - Oracle_enhanced werkt niet

  3. Een database ontwerpen:wat is de betere aanpak?

  4. Datum uit string-orakel halen