このコードのバグを理解できません
ID AccountID Quantity
1 1 10 Sum = 10
2 1 5 = 10 + 5 = 15
3 1 2 = 10 + 5 + 2 = 17
4 2 7 = 7
5 2 3 = 7 + 3 = 10
SELECT ID, AccountID, Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT,
FROM tCariH
クエリが実行中の合計を返すと予想したようですが、AccountID
の両方のパーティションに同じ値を与えている必要があります。
SUM() OVER ()
で積算合計を取得するには、次のようにORDER BY
の後にPARTITION BY …
副節を追加する必要があります。
SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY ID)
ただし、すべてのデータベースシステムがウィンドウ集約関数のOVER
句でORDER BY
をサポートしているわけではないことを覚えておいてください。 (たとえば、SQL Serverは最新バージョンのSQL Server 2012までサポートしていませんでした。)
sQL 2012を使用している場合は、試してみてください
SELECT ID,
AccountID,
Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY AccountID rows between unbounded preceding and current row ) AS TopBorcT,
FROM tCariH
可能な場合は、日付列で並べ替えてください。
クエリは次のようになります。
SELECT ID, AccountID, Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT
FROM #Empl ORDER BY AccountID
Group byのように機能します。ここでは、AccountIDでグループ化しているため、sumはAccountIDに対応します。
最初の最初の場合、AccountID = 1、次にsum(quantity)= 10 + 5 + 2 => 17&AccountID = 2の場合、sum(Quantity)= 7 + 3 => 10
結果は、添付の snapshot のように表示されます。