, , :
SQLFiddle
Create Table
ID int
, Name VARCHAR(255)
, ParentID int
, AncestryCompleteTF tinyint
, Ancestors varchar(max)
, TotalValue int
)
INSERT INTO
SELECT
ID
, Name
, ParentID
, CASE ISNULL(ParentID, 0)
WHEN 0 THEN 1
ELSE 0
END
, CONVERT(VARCHAR, ISNULL(ParentID, ''))
, Value
FROM
Averages
WHILE EXISTS (SELECT * FROM
BEGIN
UPDATE C SET
C.Ancestors = P.Ancestors + ',' + CONVERT(VARCHAR, P.ID),
C.AncestryCompleteTF = 1,
C.TotalValue = P.TotalValue + C.TotalValue
FROM
INNER JOIN
AND P.AncestryCompleteTF = 1
END
SELECT
Name
, TotalValue
FROM
while, , ( ) . , ParentID null, , , .. ..