0

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

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 行,但如果我这样做会更有效率,这是我下一个尝试的方法。

一个不幸的限制:由于缺乏数据库特权,我无法创建过程或函数。

4

1 回答 1

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
于 2013-01-29T00:24:55.613 回答