我不是很確定你想要什麼。但我會試一試。
首先是一些測試數據:
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