我的 SQL Server 数据库中有一个表,其中包含如下数据:
ID ParentID
--- ---------
1 NULL
2 1
3 1
5 1
5 4
5 6
8 6
7 9
9 10
我需要一个select
语句来返回它们之间有某种关系的所有行(无论是父项还是子项)。例如 for id
= 1 我需要获取除最后两行之外的所有行。对于id
= 2, 3, 4, 5, 6 ,8 必须得到相同的结果。对于id
= 7 或 9,语句必须只返回最后两行。我试图用递归 CTE 解决这个问题,但我失败了。
我也不擅长递归,所以不要难过。我已经成功地使用了类似于以下的结构。它并不优雅,但您可以确切地看到发生了什么。基本上,您需要收集所有可能的值以针对给定的 ParentID 值针对 ID 和 ParentID 进行评估。此解决方案采用整数值。字母数字值会变得有点棘手。这样做的好处是您可以按原样运行它或修改它以显示分层排序。