Решение не использовать ORDER BY в разделе в SQL Server 2008 - PullRequest
0 голосов
/ 08 июля 2019

У меня есть следующий запрос, который прекрасно работает на SQL Server 2012:

   SELECT Name, 
     WeekNumber,
     SUM(NumberOfSecondsWorked) AS totalDaily,
     StartTime,
     EndTime,
     SUM(SUM(NumberOfSecondsWorked)) OVER (PARTITION BY WeekNumber ORDER BY EndTime) AS totalWeekly 
   FROM #temp AS T1

Но, к сожалению, я получаю следующую ошибку при выполнении этого запроса в БД SQL Server 2008:

Incorrect syntax near 'order'.

Мой желаемый результат вышеприведенного запроса - добавить NumberOfSecondsWorked by Day для каждой недели. Вот мой желаемый вывод:

enter image description here

Но без ORDER BY я просто получаю итоги за каждую неделю без приращения по дням:

enter image description here

Кто-нибудь знает, как выполнить вышеуказанный запрос в SQL Server 2008? Или механизм, чтобы получить тот же результат? Спасибо!

Ответы [ 2 ]

3 голосов
/ 08 июля 2019

SQL Server 2008 не поддерживает накопленные суммы.Я рекомендую обновить до поддерживаемой версии SQL Server.

Тем не менее, вы можете реализовать это, используя коррелированный подзапрос или боковое соединение (т. Е. apply):

SELECT t.*,
       (SELECT SUM(t2.totalDaily)
        FROM #temp t2
        WHERE t2.WeekNumber = t.WeekNumber AND
              t2.EndTime <= t.EndTime
       ) as running_weekly
FROM #temp t2
0 голосов
/ 08 июля 2019

Предлагаю вам прочитать следующую статью: https://dba.stackexchange.com/questions/47116/in-microsoft-sql-server-2008-syntax-generates-the-error-the-parallel-data-ware

Это объясняет, что то, что вы хотите сделать, не поддерживается до SQL2012. Вы можете использовать обходной путь, предложенный коллегой, но лучшее решение - перейти на версию сервера sql, которая поддерживает то, что вы хотите сделать. До свидания, Simone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...