sql >> Databasteknik >  >> RDS >> Sqlserver

Beräkna summan av värden i trädet (rekursiv fråga)

Ditt försök att använda LEAD kommer inte att fungera eftersom det inte summerar alla tidigare nivåer och dess ID måste vara sekventiellt.

Explodera hela hierarkin för varje anställd först så att varje anställd inkluderas en gång per hierarkinivå:

;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. Om variabel är lika med värde php

  2. UTF - 8 med JPA och Glassfish 4.0

  3. Hur man autokompletterar flera tabeller med DBEdit

  4. Läs igenom stora textfiler och lagra varje rad i databasen