Я не могу понять ошибку этого кода.
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)
Но помните, что не все системы баз данных поддерживают ORDER BY
в предложении OVER
агрегатной функции окна. (Например, 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
Разбиение на разделы работает так же, как группировка по. Здесь мы группируем по AccountID, поэтому сумма будет соответствовать AccountID.
Первый первый случай, AccountID = 1, тогда sum(quantity) = 10 + 5 + 2 => 17 & Для AccountID = 2, тогда sum(Quantity) = 7+3 => 10
Таким образом, результат будет выглядеть как на прилагаемом snapshot.