【发布时间】:2016-10-22 22:32:34
【问题描述】:
我有一个返回父子关系的 CTE。如果我使用 PanelID 选择 where 子句,我将获得子面板的所有父项。然而,深度是相反的。我需要子面板的部门为 2,顶层父级为 0。
WITH category_cte AS
(SELECT PanelID AS SourceID, PanelID, BP_DP, 0 AS depth FROM dbo.tblPanels
UNION ALL
SELECT CTE.SourceID, C.PanelID, C.BP_DP, CTE.depth + 1 AS depth
FROM dbo.tblPanels AS C INNER JOIN
category_cte AS CTE ON C.SCID = CTE.PanelID)
SELECT SourceID, PanelID, BP_DP, depth
FROM category_cte AS category_cte_1 where PanelID = x
返回
SourceID PanelID BP_DP depth
1240 1240 1 0
1446 1240 1 1
1434 1240 1 2
【问题讨论】:
-
返回的不就是这个吗?递归地使用具有计算深度的 CTE 应将顶部节点返回为 0,后续节点返回 > 0。因此,如果我们有祖父-父-子,则结果为 0-1-2。
-
返回值为 0 为孩子。我正在寻找相反的结果。
标签: sql sql-server sql-server-2008 recursion common-table-expression