Исходя из того, что вы просите, я думаю, что у вас есть опечатка в таблице примеров.Если вы внесете следующие изменения, это изменит сложность CTE:
Id|State|Quan|SellQuan|LastId
3 |2 | 5 | 5 |2
2 |3 |10 | 5 |1
1 |3 |15 | 5 |NULL
Мое внесение этого изменения упростит CTE.
DECLARE @tbl TABLE(Id INT,State INT,Quan INT,SellQuan INT,LastId INT)
INSERT INTO @tbl
VALUES
(3,2,5,5,2),
(2,3,10,5,1),
(1,3,15,5,NULL);
;WITH CTE(Id,total,depth)
AS (
SELECT tbl.Id, SellQuan as total, 0 as depth
FROM @tbl AS tbl
WHERE tbl.LastId is null
UNION ALL -- Recursive part of the query
SELECT tbl.Id,
tbl.SellQuan + CTE.total,
CTE.depth + 1 as depth
FROM @tbl AS tbl
INNER JOIN CTE ON CTE.Id = tbl.LastId
)
SELECT top 1 total
FROM CTE
order by depth desc;
Надеюсь, это поможет.Для получения дополнительной информации о CTE у меня есть несколько статей на моем сайте: http://stevestedman.com/cte/