テーブルの従業員(id、name、parentid)にツリー構造があり、このテーブルはネストすることができます.employeesは別のテーブルと1対多の関係です。 、従業員番号、数量)。各従業員には販売数量があります。私は子供の従業員と一緒に各従業員の数量の合計を計算したいと思います。私はより明確になるようにいくつかのコードを書いた。ツリー内の値の合計を計算する(再帰クエリ)
DECLARE @Employees TABLE(ID INT, Name NVARCHAR(100), ParentID INT);
DECLARE @Sales TABLE(ID INT, EmployeeID INT, Quantity INT);
INSERT INTO @Employees(ID, Name, ParentID)VALUES
(1,N'Employee1', NULL),
(2,N'Employee2', 1),
(3,N'Employee3', 2),
(4,N'Employee4', NULL),
(5,N'Employee5', 4),
(6, N'Employee6', 5)
INSERT INTO @Sales(ID, EmployeeID, Quantity)VALUES
(1,1,4),
(2,1,2),
(3,2,3),
(4,3,2),
(5,3,7),
(6,5,8),
(7,5,3),
(8,6,2)
しかし、この:ここ
は、クエリは、この結果を返す;WITH cte
AS
(
SELECT e.ID, e.Name, e.ParentID FROM @Employees e
WHERE e.ParentID IS NULL
UNION ALL
SELECT e.ID, e.Name, e.ParentID FROM @Employees e
INNER JOIN cte c ON c.ID = e.ParentID
)
SELECT
c.ID
,c.Name
,c.ParentID
,ISNULL(SUM(s.Quantity), 0) AS ParentSumSales
,ISNULL(LEAD(SUM(s.Quantity)) OVER(ORDER BY c.ID), 0) AS ChildSumSales
FROM cte c
LEFT JOIN @Sales s ON s.EmployeeID = c.ID
GROUP BY c.ID, c.Name, c.ParentID
私のクエリです私私はこのようなデータを取得したい、正しくないよ:あなたの「従業員」表は時折変更される場合
ID Name ParentSumSales ChildSumSales
--- --------- ------------- -------------
1 Employee1 6 12
2 Employee2 3 9
3 Employee3 9 0
4 Employee4 0 13
5 Employee5 11 2
6 Employee6 2 0
はい、それは動作します、しかし、左の内側のおかげで何もして、グループを使用する必要があり、合計はありません参加 – www1986
@ www1986:これは元のクエリを修正しようとしていて残っていたもので、それ以降はチェックしなかった:)私はそれに応じて修正する – dnoeth