最终子项的SQL父/子和值

时间:2015-05-12 19:09:40

标签: sql

这是我的简单表格

PARENT CHILD QTY
-----------------
A      B     1
A      C     2
A      D     1
B      E     1
B      F     1
E      F     1
A      E     1

预期输出看起来像那样

CHILD    SUM(QTY)
C        2
D        1
F        6

查询应该总结“最后一个孩子”的所有数量,这意味着如果父母有B子女而B是父母意味着等级

Aparent -> Bchild -> Bparent 

然后F是最后一个CHILD(无父)和B -> Eparent -> Fchild + 1的Echild。所以这就像F QTY1这次解体2次。

对整个普通表进行求和意味着C QTY 2,D QTY 1和F QTY 6次1。

我发现了很多类似的问题,但这种想法对我来说太复杂了,以至于很难理解。

这是层次结构和递归的某种组合。谢谢你的想法

编辑逻辑解释(C和D仅适用于本质):

C QTY由A-> C = QTY 2得到 D QTY由A-> D = QTY 1

得到

然后

A -> Bchild -> Bparent分为:

Echild - >表观 - > Fchild = QTY 1 +
Fchild = QTY 1(到目前为止是2,然后相同的解体使F数量为6,逻辑是 - 如果CHILD在PARENT中然后计算CHILD QTY,但如果CHILD在PARENT中,则计算它是儿童,直到没有名为CHILD的父亲是找到。

编辑:参见SQLFiddle
SQLFIDDLE
这是查询以获得预期结果但没有递归部分...

1 个答案:

答案 0 :(得分:1)

我写这个作为获得更多标记的答案。 这是F如何成为6:

F is child of E -> (E-F) = 1
E is child of B -> (B-E) = 1 
B is child of A -> (A-B) = 1

E is child of A -> (A-E) = 1
F is child of B -> (B-F) = 1
B is child of A -> (A-B) = 1

总(E-F)+(B-E)+(A-E)+(B-F)+(A-B)+(A-B)= 6

编辑:我认为你需要一个功能。然后该函数将返回给定父级的值。只要函数返回一个值,就循环遍历结果。