Итоги по SQL

У меня есть таблица со списком предметов и кол-во, которые будут проданы к определенной дате. Я пытаюсь вычислить столбец промежуточного итога, который бы показывал, сколько предметов было бы продано за определенный период. ниже моя попытка получить промежуточные итоги, но это не работает, как я ожидаю.

select item, due_date, qty, sum(qty) over (Order by item )
from apsplan 
Where item ='19-3102875'
order by item

Я получаю ошибку:

Сообщение 102, Уровень 15, Состояние 1, Строка 44 Неверный синтаксис рядом с 'order'.

PS Я использую SQL Server 2012.

Вот альтернативное предложение, которое я получил отсюда

SELECT
    item,
    due_date,
    qty,
    (SELECT SUM(t2.qty) FROM apsplan t2 WHERE t2.item <= t1.item and item = '196-31020-005') AS rolling_qty
FROM apsplan t1
WHERE
    item = '196-31020-005'
ORDER BY
    item

вот результат - не промежуточный итог, а более

item    due_date    qty rolling_qty
196-31020-005   2017-09-20 00:59:00.000 1.00000000  24.00000000
196-31020-005   2017-10-06 01:00:00.000 1.00000000  24.00000000
196-31020-005   2017-11-06 01:00:00.000 1.00000000  24.00000000
196-31020-005   2017-12-06 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-01-28 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-02-04 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-03-25 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-03-25 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-04-01 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-04-08 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-04-29 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-05-06 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-05-13 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-05-27 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-06-03 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-06-10 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-07-01 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-07-08 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-07-15 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-07-29 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-08-05 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-08-12 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-08-26 01:00:00.000 1.00000000  24.00000000
196-31020-005   2019-09-02 01:00:00.000 1.00000000  24.00000000

1 ответ

Это слишком долго для комментария.

Даже если вы используете SQL Server 2012, фактическая функциональность зависит от уровня совместимости. Вы можете запросить уровень совместимости, используя:

SELECT name, compatibility_level FROM sys.databases

Это должно быть не менее 110 для вас, чтобы использовать order by с sum(), Чтобы изменить совместимость, обратитесь к документации. Если у вас более старая совместимость (возможно, требуется менее 100), вы можете получить эту ошибку.

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