Ich muss jede Ebene die Summe aller untergeordneten Elemente (in der Hierarchie) zusätzlich zu den Werten haben, die für die Spalten "Budget" und "Überarbeitetes Budget" für diesen Wert festgelegt wurden.Summe der untergeordneten Ebenen insgesamt in einer Hierarchie
Ich habe eine vereinfachte Version meiner Tabellenstruktur und einige Beispieldaten hinzugefügt, um zu veranschaulichen, was gerade produziert wird und was ich gerne produzieren würde.
Probentabelle:
CREATE TABLE Item (ID INT, ParentItemID INT NULL, ItemNo nvarchar(10), ItemName nvarchar(max), Budget decimal(18, 4), RevisedBudget decimal(18, 4));
Beispieldaten:
INSERT INTO Item (ID, ParentItemID, ItemNo, ItemName, Budget, RevisedBudget) VALUES (1, NULL, N'10.01', N'Master Bob', 0.00, 17.00);
INSERT INTO Item (ID, ParentItemID, ItemNo, ItemName, Budget, RevisedBudget) VALUES (2, 1, N'10.01.01', N'Bob 1', 0.00, 0.00);
INSERT INTO Item (ID, ParentItemID, ItemNo, ItemName, Budget, RevisedBudget) VALUES (3, 2, N'10.01.02', N'Bob 2', 2.00, 2.00);
INSERT INTO Item (ID, ParentItemID, ItemNo, ItemName, Budget, RevisedBudget) VALUES (4, 2, N'10.02.01', N'Bob 1.1', 1.00, 1.00);
CTE SQL zu generieren Hierarchie:
WITH HierarchicalCTE
AS
(
SELECT ID, ParentItemID, ItemNo, ItemName, Budget, RevisedBudget, 0 AS LEVEL
FROM Item
WHERE Item.ParentItemID IS NULL
UNION ALL
SELECT i.ID, i.ParentItemID, i.ItemNo, i.ItemName, i.Budget, i.RevisedBudget, cte.LEVEL + 1
FROM HierarchicalCTE cte
INNER JOIN Item i ON i.ParentItemID = cte.ID
)
So, mein derzeitiger CTE erzeugt (vereinfacht):
ID: 1, Level: 0, Budget: 0, RevisedBudget: 17
ID: 2, Level: 1, Budget: 0, RevisedBudget: 0
ID: 3, Level: 2, Budget: 2, RevisedBudget: 2
ID: 4, Level: 2, Budget: 1, RevisedBudget: 1
Und ich möchte, dass die Ergebnisse produzieren:
ID: 1, Level: 0, Budget: 3, RevisedBudget: 20
ID: 2, Level: 1, Budget: 3, RevisedBudget: 3
ID: 3, Level: 2, Budget: 2, RevisedBudget: 2
ID: 4, Level: 2, Budget: 1, RevisedBudget: 1
Hoffentlich ist leicht genug, um zu verstehen. CTE
Verbindung mit Tabelle SQLFiddle und initial: http://sqlfiddle.com/#!3/66f8b/4/0
Bitte beachten Sie, dass jede vorgeschlagene Lösung benötigt, in SQL Server 2008R2 zu arbeiten.
Ihre zweite Antwort mit dem CTE funktioniert gut. Ich habe es als Antwort akzeptiert. –