运行总和达到目标值时获取记录

时间:2014-03-13 16:39:06

标签: sql sql-server tsql sql-server-2008-r2 business-intelligence

DECLARE @example TABLE(ID INT, Amount float)
INSERT INTO @example VALUES(1,100), (2,500), (3,50), (4,200)

select * from @example

DECLARE @Target Float = 600

现在,我需要热门记录where Sum(Amount) = @Target,此目标可能会有所不同。

有人可以给我一个sql查询。

1 个答案:

答案 0 :(得分:0)

您可以使用相关子查询(以及其他方法)计算累积总和。假设id唯一标识行:

select e.*
from (select e.*,
             (select sum(amount)
              from @example e2
              where e2.id <= e.id
             ) as cumamount
      from @example e
     ) e
where cumamount = @Target;

这准确地查找目标值。更常见的是,您需要以下内容:

where cumamount >= @Target and cumamount - amount < @Target;

即,满足或超过@Target值的第一个值。