Проблема с оконной функцией в 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>
для агрегатов.