想出算法:计算每家公司的全部收益
Think up algorithm: Calculate full earnings for every company
我有一个包含公司的 TreeView。每个公司都可以有子公司,每个子公司都可以有子公司,并且可以一直持续到无穷大。
每个公司都有自己的收益,并且有等于该公司所有子公司的总和的 FullEarnings。
如果已知每家公司的收益,我需要计算每家公司的收益。
示例:
CompanyName | OwnEarnings | FullEarnings
-Company1 | 25K$ | 53K$
--Company2 | 13K$ | 18K$
---Company3 | 5K$
--Company4 | 10K$
我有一个数据库列 ParentID,link 用于标识母公司。
我该怎么做?也许通过递归?
无论哪种方式,您都需要递归更新 table。
在你的情况下,它看起来像:
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
查询更改 select,如此 SQL Fiddle example
中所示
我有一个包含公司的 TreeView。每个公司都可以有子公司,每个子公司都可以有子公司,并且可以一直持续到无穷大。 每个公司都有自己的收益,并且有等于该公司所有子公司的总和的 FullEarnings。
如果已知每家公司的收益,我需要计算每家公司的收益。
示例:
CompanyName | OwnEarnings | FullEarnings
-Company1 | 25K$ | 53K$
--Company2 | 13K$ | 18K$
---Company3 | 5K$
--Company4 | 10K$
我有一个数据库列 ParentID,link 用于标识母公司。
我该怎么做?也许通过递归?
无论哪种方式,您都需要递归更新 table。
在你的情况下,它看起来像:
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
查询更改 select,如此 SQL Fiddle example