Подтвердить что ты не робот

Как использовать 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
4b9b3361

Ответ 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

поэтому результат будет выглядеть как прикрепленный снимок.