查找达到特定总和所需的行数

时间:2013-01-29 00:21:32

标签: sql sql-server tsql

我想找到我需要的排序表列的行数,以使它们的总和为特定大小。这是我(非常低效)的代码尝试:

DECLARE @CURNUM AS INT
DECLARE @CURSUM AS MONEY
SET @CURSUM=0.0
SET @CURNUM=1
WHILE @CURSUM<100000
BEGIN
     SET @CURNUM=@CURNUM+1
     SELECT @CURSUM = SUM(val1) FROM 
     (SELECT top (@CURNUM) val1 from table order by val1) a
END
print @CURNUM

有没有人建议加快实施?我不知道如何选择表格的第i行,但如果我这样做会更有效率,那就是我的下一个方法。

一个不幸的限制:由于缺乏数据库原因,我无法创建程序或功能。

1 个答案:

答案 0 :(得分:2)

假设您使用的是2012年之前的版本:

select count(*)
from (select t.*,
             (select sum(val1) from table t2 where t2.val1 <= t.val1) as cumesum
      from table t
     ) t
where cumesum <= 100000

这使用相关子查询计算累积和。然后它只计算小于或等于阈值的数字。

在SQL Server 2012中,cumesum的表达式为:

sum(val1) over (order by val1) as cumesum