SQL Server 10.50 ОБЩЕЕ РАЗДЕЛЕНИЕ не распознается - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь использовать OVER PARTITION в SQL Server 2008 R2 (v10.50.1600.1), но написание и выполнение указывает на ошибку рядом с ЗАКАЗОМ, я пытался выполнить этот же запрос без изменений в SQL Server 2014 (v12.0.4100.1), но он работает без проблем, и в документации по SQL Server мне не удалось найти ничего, я знаю, что есть другие способы для симуляции этого процесса, но я хотел бы знать, есть ли более гибкийэквивалентность.Спасибо

SELECT 
    e.ID, e.[date], 
    COUNT(*) OVER (PARTITION BY e.ID ORDER BY e.[date] DESC) AS ind
FROM 
    events e 
JOIN 
    Manager h ON h.ID = e.ID AND h.Active = 1 AND h.[Status] <> 30037 
WHERE 
    e.Iary IN (1, 2, 3) 
GROUP BY 
    e.ID, e.[date]

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

Сообщение 156, Уровень 15, Состояние 1, Строка 3
Неверный синтаксис рядом с ключевым словом "ЗАКАЗАТЬ"

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Удалить ORDER BY e.[date] DESC

SELECT e.ID, e.[date], COUNT(*) OVER(PARTITION BY e.ID) AS ind
FROM events e 
JOIN Manager h ON h.ID = e.ID AND h.Active = 1 AND h.[Status] <> 30037 
WHERE e.Iary IN (1,2,3) 
GROUP BY e.ID, e.[date]
0 голосов
/ 26 сентября 2019

COUNT () должен вести учетную запись программы этой группы, но уже решить ее, в 10.50 несовместимо использование ORDER BY с COUNT (), что, если оно работает и соответствует цели в 12.0,изменение COUNT (*) на ROW_NUMBER ()

SELECT e.ID, e.[date], ROW_NUMBER() OVER (PARTITION BY e.ID ORDER BY e.[date] DESC) AS ind FROM events e JOIN Manager h ON h.ID = e.ID AND h.Active = 1 AND h.[Status] <> 30037 WHERE e.Iary IN (1, 2, 3) GROUP BY e.ID, e.[date]

0 голосов
/ 25 сентября 2019

Ваш запрос должен выглядеть следующим образом.Вы хотите получить только count() за e.ID

SELECT e.ID, e.[date], COUNT(*) AS ind
        FROM events e 
        JOIN Manager h ON h.ID = e.ID AND h.Active = 1 AND h.[Status] <> 30037 
        WHERE e.Iary IN (1,2,3) 
        GROUP BY e.ID, e.[date]
        ORDER BY e.[date]
...