我有一个包含一个单一的表ID,Amount和Parent_ID.(实际上它有点复杂,但这是本例中的所有重要列).基本上我想要做的是将Amount列与最低公共父项(即父ID为NULL的那些)进行分组和求和.
ID Amount Parent_ID
1 100 NULL
2 150 1
3 50 1
4 75 3
5 25 4
6 125 NULL
7 50 6
8 50 7
9 100 8
Run Code Online (Sandbox Code Playgroud)
预期成绩:
ID SUM
1 400
6 325
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它只会返回两个记录,即没有父级的记录,这意味着它们是顶级项目.Sum列是Amount递归所有子项的总和,因此ID= 1是1,2,3,4和5 ID的总和.= 6是6,7,8和9的总和.
如果您可以在层次结构中定义级别数限制,则可以将此解决方案扩展到任意数量的级别:
select
coalesce(t5.ID,t4.ID,t3.ID,t2.ID,t1.ID) as Root,
sum(t1.Amount) as Amount
from Table1 t1
left join Table1 t2 on t1.Parent_ID = t2.ID
left join Table1 t3 on t2.Parent_ID = t3.ID
left join Table1 t4 on t3.Parent_ID = t4.ID
left join Table1 t5 on t4.Parent_ID = t5.ID
group by Root
Run Code Online (Sandbox Code Playgroud)
只需left join根据需要添加更多内容并将其添加到的列中coalesce.
演示:http://www.sqlfiddle.com/#!2/b7a79/17
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |