【问题标题】:Think up algorithm: Calculate full earnings for every company思考算法:计算每家公司的全部收益
【发布时间】:2016-05-22 01:53:29
【问题描述】:

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

如果知道每家公司的收益,我需要计算每家公司的收益。

例子:

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

我有一个数据库列 ParentID,它链接到 id parent company。

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

【问题讨论】:

  • 我相信我已经解决了以下问题,如果您有任何问题、疑问或疑虑,请告诉我!

标签: sql asp.net database algorithm treeview


【解决方案1】:

无论哪种方式,您都需要递归更新您的表格。

在你的情况下,它看起来像:

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 所示

【讨论】:

  • 也许,解决的是真的。但我必须从后面的 C# 代码将查询绑定到数据库。
  • 也许您正在寻找Database.ExecuteSqlCommand()MSDN page
猜你喜欢
  • 2019-08-14
  • 2020-07-13
  • 2023-04-01
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
相关资源
最近更新 更多