2015-06-17 4 views
0

Может кто-нибудь рассказать мне, почему это вызывает синтаксическую ошибку в SQL Server 2008 R2? Он отлично работает в SQL Server 2014.Синтаксическая ошибка SQL Server 2008 R2

SELECT   
    CustomerId, RequestDate, 
    SUM(InitialActualCount + (KeyCardCount * x.Activity)) 
     OVER (PARTITION BY CustomerId ORDER BY RowNumber) AS TotalActualCount, 
    RowNumber 
FROM    
    (SELECT   
     *, 
     ROW_NUMBER() OVER (PARTITION BY CustomerId 
         ORDER BY CustomerID, RequestDate) AS RowNumber 
    FROM    
     RequestTable) x 

структуру таблицы:

RequestTable (CustomerId, RequestDate, KeyCardCount, Activity, InitialActualCount)   

Ошибка:

Incorrect syntax near 'order'.
Incorrect syntax near 'x'.

Заранее спасибо за любую помощь!

ответ

1

По крайней мере один из ваших вопросов, эта линия:

SELECT /*snip*/ sum(InitialActualCount + (KeyCardCount * x.Activity)) 
    OVER (partition BY CustomerId ORDER BY RowNumber) AS TotalActualCount /*snip*/ 

Возможность добавления ORDER BY пункт в OVER пункта с агрегатом (SUM в вас случай) был добавлен в SQL Server 2012 .

Получение итогов работы было хорошо известной проблемой до 2012 года - см. Best approaches for running totals – updated for SQL Server 2012 для исчерпывающего обсуждения этого вопроса.

+0

Спасибо за ссылку. У меня такое чувство, что ты прав насчет моей проблемы. –

+0

Определенно ваша проблема. Но даже если он ошибался, и вы можете использовать ORDER BY в своей оконной функции SUM, я не уверен, почему вам будет все равно, что это за заказ, когда вы делаете SUM, или MIN, или MAX, или COUNT , Попытка подумать о том, где вы будете его использовать. – JamieD77

0
SELECT   
    *, 
    ROW_NUMBER() OVER (PARTITION BY CustomerId 
         ORDER BY CustomerID, RequestDate) AS RowNumber 
FROM RequestTable 

Вам не нужен псевдоним для использования *?

SELECT   
    a.*, 
    ROW_NUMBER() OVER (PARTITION BY CustomerId 
         ORDER BY CustomerID, RequestDate) AS RowNumber 
FROM RequestTable a 
+0

Нет, это не исправить. –

0

Потерять "х" в соответствии с:

SELECT 
    CustomerId, 
    RequestDate, 
    SUM(InitialActualCount + (KeyCardCount * x.Activity)) OVER (PARTITION BY CustomerId ORDER BY RowNumber) AS TotalActualCount, 
    RowNumber 
FROM 
    (
    SELECT 
     *, 
     ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY CustomerID, RequestDate) AS RowNumber 
    FROM 
     RequestTable 
) RequestTable (CustomerId, RequestDate, KeyCardCount, Activity, 
        InitialActualCount)  
+0

Нет, все еще «неправильный синтаксис рядом с порядком» –