Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tính tổng các giá trị trong cây (truy vấn đệ quy)

Nỗ lực của bạn bằng cách sử dụng LEAD sẽ không hoạt động vì nó không tổng hợp tất cả các cấp trước đó và ID của nó phải tuần tự.

Giải thích hệ thống phân cấp đầy đủ cho từng nhân viên trước để mỗi nhân viên được bao gồm một lần trên mỗi cấp phân cấp:

;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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giải thích tất cả toán tử SQL Server

  2. Làm cách nào để đính kèm cơ sở dữ liệu?

  3. Nhóm người dùng máy chủ Charlotte SQL:Khắc phục các truy vấn chậm. Nhanh.

  4. Giao thức TDS Phiên bản 8.0 là gì và tại sao tôi nên sử dụng nó?

  5. OPENROWSET BULK quyền đối với thư mục được chia sẻ