我想找到我需要的排序表列的行数,以使它们的总和为特定大小。这是我(非常低效)的代码尝试:
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行,但如果我这样做会更有效率,那就是我的下一个方法。
一个不幸的限制:由于缺乏数据库原因,我无法创建程序或功能。
答案 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