【发布时间】:2017-06-15 17:09:01
【问题描述】:
我在 SQL Server (2012) 中有下表:
我的表:
Id __ParentId Priority
1 NULL NULL
2 1 100
3 1 300
4 1 200
5 4 100
6 4 200
7 6 100
8 5 100
9 5 200
10 9 100
11 5 50
__ParentId 列引用 Id 以了解任何一行的父级,它可以向下递归到多个级别(例如,Id 8 是5 的孩子,4 的孩子,1 的孩子)。
此外,还有一个 Priority 列,显示子级在父级中出现的顺序(最小的数字优先)。
所以,我想要的决赛桌是:
Id __ParentId Priority Order
1 NULL NULL 1
2 1 100 2
4 1 200 3
5 4 100 4
11 5 50 5
8 5 100 6
9 5 200 7
10 9 100 8
6 4 200 9
7 6 100 10
3 1 300 11
为了解释一下,我们有 2 是 1 的一个孩子,并且具有最高优先级,但没有孩子,所以我们停在那里,然后 4 是下一个优先级孩子,所以它去了接下来,但我们会根据优先级和层次结构分为它的子代和它们的子代。
或者,通过树结构来解释:
1
2
4
5
11
8
9
10
6
7
3
我可以创建将给我父母的孩子的 CTE,但我无法找到获得正确排序的好方法,因此我什至无法提供我一直在尝试的良好 SQL。
【问题讨论】:
标签: sql-server tsql recursion sql-server-2012 common-table-expression