1

Advantage SQL で現在までの合計クエリ ステートメントを作成したいと考えています。次のようなクエリでデータを取得できます。

SELECT a.fiscal,sum(a.amount) periodTotal,(SELECT sum(b.amount) 
FROM tableName b  WHERE b.fiscal<=a.fiscal) runningTotal 
FROM tableName a GROUP BY a.fiscal,runningTotal

しかし、データセットは大きい (100 万レコード以上) ため、これがこの情報を取得する最も効率的な方法であるかどうか疑問に思っています。

テーブルの生データは次のようになります。

Fiscal Account
Period ID      Amount
====== ======= ======
     1 Cash         1
     1 Cash         2
     2 Cash         1
     2 Cash         2
     1 A/R          1
     1 A/R          2
     2 A/R          1
     2 A/R          2

結果を次のようにしたいと思います。

               Total  
Fiscal Account For    Running 
Period ID      Period Total
====== ======= ====== =======
     1 Cash         3       3
     2 Cash         3       6
     1 A/R          3       3
     2 A/R          3       6
4

2 に答える 2

2

私が見つけた最速の方法は、中間テーブルを使用することです。

SELECT "Fiscal Period", "Account ID", Sum( amount ) PeriodTotal
INTO #temp
FROM TableName
GROUP BY 2, 1;

SELECT "Fiscal Period", "Account ID", PeriodTotal,
   ( SELECT Sum(PeriodTotal) FROM #temp b 
     WHERE b."Account ID" = a."Account ID" 
        And b."Fiscal Period" <= a."Fiscal Period" ) RunningTotal
FROM #temp a
于 2011-02-23T15:56:57.843 に答える
-1

おそらく最も効率的ではありませんが、SQL カーソルを使用してテーブルを反復処理しますか?

于 2011-02-20T22:13:14.227 に答える