如何在SQL中查找所有子项的最多一列

时间:2015-12-01 10:59:32

标签: sql-server tsql

我有一张类似图片的图表,将其存储在KID , ParentID的表格中。 如何为所有在父母之下的孩子获得最大MR。

示例:对于节点C ----> max(MR(D),MR(E),MR(F))

如何为节点的所有子节点找到Max(MR)?

enter image description here

2 个答案:

答案 0 :(得分:1)

DECLARE @a TABLE
(
    KID INT PRIMARY KEY,
    ParentID INT,
    MR INT
)

INSERT INTO @a (KID, ParentID, MR)
VALUES
    (1, 0, 3), (2, 1, 1), (3, 1, 3),
    (4, 3, 3), (5, 3, 5), (6, 5, 3)

;WITH cte AS
(
    SELECT *
    FROM @a
    WHERE ParentID = 3

    UNION ALL

    SELECT t2.*
    FROM cte t1
    JOIN @a t2 ON t1.ParentID = t2.KID
)
SELECT MAX(MR) 
FROM cte
OPTION (MAXRECURSION 0)

结果 -

5

答案 1 :(得分:1)

也许你可以使用over子句

SELECT 
  ParentID,
  MAX(MR) OVER(PARTITION BY ParentID) 
FROM
  Table