我有一个问题如下:
ID NAME AMOUNT PARENTID
1 Adam 1000 0
2 John 2000 1
3 Clark 1500 2
4 Rita 1200 3
5 jack 1600 3
6 mark 1800 2
7 Finn 1500 6
8 Ryan 1100 6
因此,上面的数据是具有多个连接的查询的结果,它是一种层次结构或树,类似于:
1
|
2
/ \
3 6
/ \ / \
5 4 7 8
现在我需要修改我的查询以便得到以下结果
ID NAME AMOUNT PARENTID DownstreamSum
1 Adam 1000 0 10700
2 John 2000 1 8700
3 Clark 1500 2 2800
4 Rita 1200 3 0
5 jack 1600 3 0
6 mark 1800 2 2600
7 Finn 1500 6 0
8 Ryan 1100 6 0
因此,逻辑是父节点应该拥有子节点中所有下游子节点的总和 DownstreamSum
列。
例如:
id 6应该是id 7和id 8的总和
id 3应该是id 4和id 5的总和
但是id 2应该有id 3的数量和id 4和5的数量之和
我尝试了很多可能性 partition by
以及 group by
但是我没能得到想要的结果。
3条答案
按热度按时间wnavrhmk1#
这是查询,请核对。
sql小提琴链接
62o28rlo2#
典型的递归cte(从oracle11gr2开始提供)将允许您将分支遍历到叶子。然后是一个简单的
SUM()
给你想要的结果。例如:结果:
参见db<>fiddle上的运行示例。
aelbi1ox3#
此查询还计算本机和子机的总和和计数:
完整示例和示例数据:
结果
基于我的另一个解决方案:属于父位置和子位置的分层查询计数记录