这是我的简单表格
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
这是查询以获得预期结果但没有递归部分...
答案 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
编辑:我认为你需要一个功能。然后该函数将返回给定父级的值。只要函数返回一个值,就循环遍历结果。