Как использовать SUM() OVER()
Я не могу понять эту ошибку кода
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
Ответы
Ответ 1
Похоже, вы ожидали, что запрос вернет текущие итоги, но он должен был дать вам одинаковые значения для обоих разделов AccountID
.
Чтобы получить текущие итоги с помощью SUM() OVER ()
, вам нужно добавить подтекст ORDER BY
после PARTITION BY …
, например:
SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY ID)
Но помните, что не все системы баз данных поддерживают ORDER BY
в предложении OVER
функции агрегации окна. (Например, SQL Server не поддерживал его до последней версии, SQL Server 2012.)
Ответ 2
если вы используете 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
если доступно, лучше упорядочить по столбцу.
Ответ 3
Запрос будет выглядеть следующим образом:
SELECT ID, AccountID, Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT
FROM #Empl ORDER BY AccountID
Разделение по работам типа group by. Здесь мы группируем AccountID, чтобы сумма соответствовала AccountID.
Первый первый случай, AccountID = 1, тогда сумма (количество) = 10 + 5 + 2 = > 17 и для AccountID = 2, тогда сумма (количество) = 7 + 3 = > 10
поэтому результат будет выглядеть как прикрепленный снимок.