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 回答