重复添加和减去值以查找具有最大累积值的组

时间:2017-01-04 08:56:25

标签: sql sql-server-2008

这对我来说很难解释,但我们走了:

我尝试将变量值添加到累积值最高的组中,并将该组分配给我的数据集(Microsoft SQL Server)中的变量。

某些变量可以属于2个(或更多!)个不同的组,我需要的是确定哪个组具有最高值。如果我将 变量的值添加到组中,则组的总和将增加,这可能会影响也可能属于该组的所有其他变量。

假设我有3组,它们具有以下初始值:

GROUP   INITIAL VALUE
A       7
B       10
C       5

我有这些变量有自己的值:

VARIABLES   VALUES
AB          20
AC          35
BC          5

AB可以属于A组或B组,AC可以属于A或C等(无论哪个具有最高值)。这基本上是对我的数据进行分组的问题。

如果我只是将变量分配给具有最高当前值的任何组,则新的组累积值将如下所示:

GROUP   SUM
A       42 (A+AC)
B       35 (B+AB+BC)
C       5  (C)

但是现在,A组的总和比B高,所以变量AB应该转移到A组:

GROUP   SUM
A       62 (A+AB+AC)
B       15 (B+BC)
C       5  (C)

现在,在我的数据集中,我有许多不同的组和变量,因此向组总和添加1个变量值会影响很多其他变量,这会影响很多组等等。

我需要的是关于如何解决这个问题的一些功能或一些指导。任何帮助表示赞赏! 谢谢:))

1 个答案:

答案 0 :(得分:0)

GROUP之间的所有"变量" 变量的结果将是顶级GROUP将拥有属于该组的所有VARIABLES的所有值以及自己的INITIAL值。考虑到这一点,我们可以继续计算每个组的最大潜力总数并占据最重要的一个:

With [INITIAL] ([GROUP], [VALUE]) As (
    Select 'A',  7 Union
    Select 'B', 10 Union
    Select 'C',  5
),   [VARIABLES] ([VARIABLE], [VALUE]) As (
    Select 'AB', 20 Union
    Select 'AC', 35 Union
    Select 'BC',  5
)
Select Top 1
    [GROUP],
    [VALUE] + (Select SUM([VALUE])
               From [VARIABLES]
               Where CHARINDEX([GROUP], [VARIABLE]) > 0 --< VARIABLE belongs to the GROUP
    ) As [CUMULATIVE VALUE]
From [INITIAL]
Order By [CUMULATIVE VALUE] Desc