2

日付と別の列に基づくテーブルの現在の合計が必要です。Salesという次のテーブルがあるとします。

Day      Client

1        Smith, J
3        Johnson, B
6        Fuller, A
7        Smith, J
8        Johnson, B
9        Lee, M

次のクエリを実行します。

SELECT a.Day, a.Client, SUM(1) AS RunningTotal
FROM Sales a CROSS JOIN Sales b
WHERE (b.Day <= a.Day) 
GROUP BY a.Day, a.Client
ORDER BY a.Day

これは私に次のことを与えます:

Day Client       RunningTotal

1   Smith, J     1
3   Johnson, B   2
6   Fuller, A    3
7   Smith, J     4
8   Johnson, B   5
9   Lee, M       6

しかし、これは半分しか正しくありません。現在の合計は、日とクライアントに基づいている必要があります。私が欲しいテーブルは次のようになります:

Day Client       RunningTotal

1   Smith, J     1
3   Johnson, B   1
6   Fuller, A    1
7   Smith, J     2
8   Johnson, B   2
9   Lee, M       1
4

2 に答える 2

2

ClientJOINに追加するだけでよいのではないですか?

SELECT a.Day, a.Client, SUM(1) AS RunningTotal
FROM Sales a 
JOIN Sales b ON b.Day <= a.Day and a.Client = b.Client 
GROUP BY a.Day, a.Client
ORDER BY a.Day

ところで: 実行中の合計を計算するこのアプローチは、小さな入力セットにのみ適しています。必要な作業は指数関数的に増加します。

于 2010-12-01T15:16:48.997 に答える
0

どうぞ。


Select a.Day, a.Client, SUM(1) AS RunningTotal
From dbo.Sales a, dbo.Sales b
Where b.Day <= a.Day And a.Client = b.Client
Group By a.Day, a.Client
Order By a.Day

于 2010-12-01T15:21:20.387 に答える