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 に答える