Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Hitung jumlah nilai di pohon (kueri rekursif)

Upaya Anda menggunakan LEAD tidak akan berfungsi karena tidak menjumlahkan semua level sebelumnya dan ID-nya harus berurutan.

Ledakan hierarki penuh untuk setiap karyawan terlebih dahulu sehingga setiap karyawan disertakan satu kali per tingkat hierarki:

;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. Cara Menentukan Budaya Invarian saat menggunakan FORMAT() di SQL Server

  2. Ubah Pengambilan Data atau Ubah Pelacakan - Sama dengan Tabel Jejak Audit Tradisional?

  3. Baca dokumen XML yang disimpan di SQL Server 2008 R2 dengan tipe data XML

  4. Cara memulihkan cadangan SQL Server 2014 di SQL Server 2008

  5. SET NOCOUNT PADA penggunaan