我和公司有一个TreeView。每个公司都可以有子公司,每个子公司都可以有子公司,这可以继续无限。 每家公司都有自己的收入,并且FullEarnings等于该公司所有子公司的总和。
如果每家公司都知道自己的收入,我需要计算每家公司的收入。
示例:
CompanyName | OwnEarnings | FullEarnings
-Company1 | 25K$ | 53K$
--Company2 | 13K$ | 18K$
---Company3 | 5K$
--Company4 | 10K$
我有一个数据库列ParentID,它链接到id父公司。
我怎么做?也许通过递归?
答案 0 :(得分:2)
无论如何,您需要以递归方式更新表格。
在您的情况下看起来像:
with C as
(
select T.Id,
T.Earnings,
T.Id as RootID
from T
union all
select T.Id,
T.Earnings,
C.RootID
from T
inner join C
on T.ParentId = C.Id
)
select T.Id,
T.ParentId,
T.CompanyName,
T.Earnings,
S.FullEarnings
from T
inner join (
select RootID,
sum(Earnings) as FullEarnings
from C
group by RootID
) as S
on T.Id = S.RootID
order by T.Id
option (maxrecursion 0);
要进行更新,您需要使用update
查询更改选择,如SQL Fiddle example