我想要找出排序表列的行数,以便它们的总和达到一定大小。以下是我在代码中(效率非常低)的尝试:
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行,但如果我这样做了,效率会更高,这是我下一步要尝试的方法。
一个不幸的限制:由于缺乏数据库权限,我不能创建过程或函数。
发布于 2013-01-29 08:24:56
假设您使用的是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 cumesumhttps://stackoverflow.com/questions/14573672
复制相似问题