Как я могу использовать SUM () OVER ()

Я не могу понять ошибку этого кода

<code>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
</code>
 Marshal06 апр. 2012 г., 07:22
Пожалуйста, улучшите представление вопроса и кадрирование. Какой вопрос здесь?
 Shannon Severance06 апр. 2012 г., 20:29
Ожидаемые и реальные результаты, пожалуйста?

Ответы на вопрос(3)

если вы используете 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.

First first case, AccountID = 1 , then sum(quantity) = 10 + 5 + 2 => 17 & For AccountID = 2, then sum(Quantity) = 7+3 => 10

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

Похоже, вы ожидали, что запрос вернет промежуточные итоги, но он должен был дать вам одинаковые значения для обоих разделовAccountID.

Чтобы получить промежуточные итоги сSUM() OVER ()нужно добавитьORDER BY подпункт послеPARTITION BY …, как это:

SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY ID)

Но помните, что не все системы баз данных поддерживаютORDER BY вOVER предложение оконной агрегатной функции. (Например, SQL Server не поддерживал его до последней версии, SQL Server 2012.)

 06 апр. 2012 г., 10:37
Я думаю, вы должны быть правы в отношении систем с ограниченной поддержкой оконных агрегатных функций. Я подозревал это, но был не совсем уверен. Рассматривая еще один (связанный) вопрос об операциях, теперь я вижу, что SQL Serveris система базы данных OP, особенно в этом случае, и система до 2012 года.
 06 апр. 2012 г., 10:29
Чтобы уточнить это: сумма () безorder by будет просто суммировать все значения для группы, определенной разделом. Кстати: SQL Server был / является единственной (AFAIK) СУБД, поддерживающей функции управления окнами без поддержки порядка в предложении раздела. Другие (PostgreSQL, Oracle, DB2, Teradata) не имеют этого ограничения
 26 апр. 2013 г., 16:21
Из того, что я могу сказать,ORDER BY был добавлен в Sql 2005:msdn.microsoft.com/en-us/library/ms189461(v=sql.100).aspx
 26 апр. 2013 г., 17:35
@RobertJeppesen: Да, но только дляranking оконные функции. Поддержка дляORDER BY вaggregate оконные функции были добавлены только в SQL Server 2012. (Взгляните наSQL Server 2005 version из этого руководства, там немного яснее.)

Ваш ответ на вопрос