gpt4 book ai didi

sql - oracle中列的层次总和

转载 作者:行者123 更新时间:2023-12-03 23:34:08 29 4
gpt4 key购买 nike

我有一个问题如下:

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 和 8 的总和
  • id 3 应该是 id 4 和 5 的总和

但 id 2 应该是 id 3 的数量和 id 4 和 5 的数量之和

我用 partition bygroup by 尝试了许多可能性,但我无法获得所需的输出。

最佳答案

这是查询,请检查。

SQL fiddle link

SELECT  Y.*, X.TOTAL_AMOUNT FROM (
WITH hierarchy (PARENTID, ID) AS (SELECT PARENTID, ID
FROM Hierarchy_result
UNION ALL
SELECT h.PARENTID, bs.ID
FROM Hierarchy_result bs, hierarchy h WHERE bs.PARENTID=h.ID)
SELECT h.PARENTID AS PARENTID,
--SUM(FR.AMOUNT)
/*SUM((CASE WHEN FR.ID=h.PARENTID
THEN FR.amount
ELSE 0.0 END))*/
SUM(FR.amount) TOTAL_AMOUNT
FROM hierarchy h, Hierarchy_result FR WHERE FR.ID=h.ID
GROUP BY h.PARENTID
ORDER BY h.PARENTID) X, Hierarchy_result Y WHERE X.PARENTID(+) = Y.ID ORDER BY Y.ID;

关于sql - oracle中列的层次总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63103369/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com