思考算法:计算每家公司的全部收入

时间:2016-05-22 01:53:30

标签: sql asp.net database algorithm treeview

我和公司有一个TreeView。每个公司都可以有子公司,每个子公司都可以有子公司,这可以继续无限。 每家公司都有自己的收入,并且FullEarnings等于该公司所有子公司的总和。

如果每家公司都知道自己的收入,我需要计算每家公司的收入。

示例:

CompanyName  | OwnEarnings | FullEarnings
 -Company1   | 25K$        | 53K$
 --Company2  | 13K$        | 18K$
 ---Company3 | 5K$
 --Company4  | 10K$

我有一个数据库列ParentID,它链接到id父公司。

我怎么做?也许通过递归?

1 个答案:

答案 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);

SQL Fiddle example

要进行更新,您需要使用update查询更改选择,如SQL Fiddle example

所示