私はテーブルを持っています(画像を参照)従業員(マネージャーは別のマネージャーなど)、id、parentid、salary、totalsalary。最後のものは、すべての従業員がその子孫の給与の合計を持つように更新する必要があります。IDごとに合計給与を取得し、カーソルの列を更新するスクリプトをすでに作成しましたが、重いです...他の方法はありますか?
DECLARE @id INT ;
DECLARE @s INT ;
DECLARE curs CURSOR FOR
SELECT personid FROM dbo.Employees
OPEN curs ;
FETCH NEXT FROM curs INTO @id ;
WHILE @@FETCH_STATUS = 0
BEGIN
WITH Xemps ( ID )
AS ( SELECT PersonID AS ID
FROM dbo.Employees
WHERE PersonID = @id
UNION ALL
SELECT e.PersonID AS ID
FROM dbo.Employees AS e
INNER JOIN Xemps AS x ON e.ManagerID = x.ID
)
SELECT @s = SUM(Salary)
FROM dbo.Employees
WHERE PersonID IN ( SELECT id
FROM Xemps )
UPDATE dbo.Employees
SET SalarySum = @s
WHERE PersonID = @id
FETCH NEXT FROM curs INTO @id
END
CLOSE curs ;
DEALLOCATE curs ;