Проблема с оконной функцией в MSSQL 2008 R2

Я получаю ошибку выполнения в следующем сценарии SQL.

Select TOP 1 Percent a.accode,a.voucherdate,a.credit,a.Debit,
    SUM(a.Debit) Over (Order By [a.accode],[a.voucherdate] ) as rdr 

    from VoucherMain as a 
    Order By a.accode,a.voucherdate

Сообщение об ошибке

Неверный синтаксис рядом с "заказ".

Может кто-нибудь сказать мне, что не так с синтаксисом скрипта?

2 ответа

Проблема в том, что вам нужен SQL Server 2012 и выше. Хорошо, я добавил "и выше" для будущих посетителей, но сравните 2008 OVER CLAUSE с 2012 OVER CLAUSE.

Версия 2008 года имеет это важное примечание:

Когда используется в контексте функции окна ранжирования, <ORDER BY Clause> может ссылаться только на столбцы, доступные в предложении FROM. Нельзя указывать целое число, представляющее позицию имени или псевдонима столбца в списке выбора. <ORDER BY Clause>не может использоваться с агрегатными оконными функциями.

В SQL Server 2008 вы можете использовать только OVER предложение для разделения агрегатных функций, а не применять порядок:

Функции окна ранжирования :: = OVER ( [ PARTITION BY value_expression, ... [ n ] ] )

Агрегатные функции окна :: = OVER ( [ PARTITION BY value_expression, ... [ n ] ])

Обратите внимание, что нет <ORDER BY Clause> для агрегатов.

Другие вопросы по тегам