我不是很确定你想要什么。但我会试一试。
首先是一些测试数据:
DECLARE @tbl TABLE(Id INT,State INT,Quan INT,SellQuan INT,LastId INT)
INSERT INTO @tbl
VALUES
(3,2,5,0,2),
(2,3,10,5,1),
(1,3,15,5,NULL)
然后递归函数是这样的:
DECLARE @Id INT=1
;WITH CTE(Id,parentId,SellQuan,topParent)
AS
(
SELECT
tbl.Id,
tbl.LastId AS parentId,
(CASE
WHEN EXISTS(SELECT NULL FROM @tbl AS tbl2 WHERE tbl2.LastId=tbl.Id)
THEN tbl.SellQuan
ELSE tbl.Quan
END) AS SellQuan,
tbl.Id AS topParent
FROM
@tbl AS tbl
WHERE
[email protected]
UNION ALL
SELECT
tbl.Id,
tbl.LastId AS parentId,
(CASE
WHEN EXISTS(SELECT NULL FROM @tbl AS tbl2 WHERE tbl2.LastId=tbl.Id)
THEN tbl.SellQuan
ELSE tbl.Quan
END) AS SellQuan,
CTE.topParent AS topParent
FROM
@tbl AS tbl
JOIN CTE
ON CTE.Id=tbl.LastId
)
SELECT
CTE.topParent AS id,
SUM(CTE.SellQuan) AS SellQaunResult
FROM
CTE
GROUP BY
CTE.topParent
希望这有助于
什么是DBMS? – 2012-02-23 17:41:47
sql server 2008R2 – driver 2012-02-23 19:53:05