我们可以使用解析函数来检索层次结构中的 parents 和 child 吗?
Can we use analytic functions to retrieve parents and child in hierarchy?
我有以下数据(真实数据的样本,要大得多):
id p_id
1 null
2 1
3 1
4 2
5 4
6 5
7 5
8 3
9 7
是否可以使用SQL服务器的解析函数得到如下结果(得到最深的层级):
id p_id
1 null
2 1
4 2
5 4
7 5
9 7
我可以使用递归 CTE 来获取每个 ID 的级别,但是我正在尝试改用分析函数。我怀疑我需要使用 Lag 或 Lead 函数,但我是分析函数的新手,所以如果可以做到这一点,请帮助分享解决方案。感谢您的帮助!谢谢
让我post将其作为答案而不是评论。
不,您不能为此目的使用分析函数。分析函数可让您汇总有关已知记录组的数据。摘要可能非常奇特——例如部分求和或计算百分位数或获取组中的先前记录。但是,"group" 是在 windowing 子句中静态定义的。
也就是说,可以表示分层数据,所以这是可能的。这个想法是包括每个元素的完整路径:
id parent_path
1 /1
2 /1/2
3 /1/3
4 /1/2/4
5 /1/2/4/5
6 /1/2/4/5/6
7 /1/2/4/5/7
8 /1/3/8
9 /1/2/4/5/7/9
使用此表示,您可以使用window函数来获取“1”的所有子项。也就是说,根本不需要 window 函数。一个简单的 like
表达式有效:parent_path like '/1/%'
.
这个数据结构的挑战是设置触发器来维护它(绝对可能,只是一些工作)。
我有以下数据(真实数据的样本,要大得多):
id p_id
1 null
2 1
3 1
4 2
5 4
6 5
7 5
8 3
9 7
是否可以使用SQL服务器的解析函数得到如下结果(得到最深的层级):
id p_id
1 null
2 1
4 2
5 4
7 5
9 7
我可以使用递归 CTE 来获取每个 ID 的级别,但是我正在尝试改用分析函数。我怀疑我需要使用 Lag 或 Lead 函数,但我是分析函数的新手,所以如果可以做到这一点,请帮助分享解决方案。感谢您的帮助!谢谢
让我post将其作为答案而不是评论。
不,您不能为此目的使用分析函数。分析函数可让您汇总有关已知记录组的数据。摘要可能非常奇特——例如部分求和或计算百分位数或获取组中的先前记录。但是,"group" 是在 windowing 子句中静态定义的。
也就是说,可以表示分层数据,所以这是可能的。这个想法是包括每个元素的完整路径:
id parent_path
1 /1
2 /1/2
3 /1/3
4 /1/2/4
5 /1/2/4/5
6 /1/2/4/5/6
7 /1/2/4/5/7
8 /1/3/8
9 /1/2/4/5/7/9
使用此表示,您可以使用window函数来获取“1”的所有子项。也就是说,根本不需要 window 函数。一个简单的 like
表达式有效:parent_path like '/1/%'
.
这个数据结构的挑战是设置触发器来维护它(绝对可能,只是一些工作)。