2016-12-07 7 views
1

Я бегу следующий код, чтобы вычислить совокупное значениеиспользование сумма по перегородке с помощью вычислить совокупную величину

SELECT 
    iid 
    ,item_id 
    ,pg_purch_ind 
    ,SUM_score1 
    ,SUM(pg_purch_ind) OVER(PARTITION BY item_id ORDER BY SUM_score1 DESC, iid % 100, iid) AS cum_pg_purch 
into table2 
FROM table1 

Но он имеет следующую ошибку «Неправильный синтаксис около„порядка“.» Кто-нибудь знает, в чем проблема?

+2

вы не можете запустить этот запрос в любой версии меньше, чем 2012 так какую версию вы используете? –

ответ

1

Вот обходной путь для меньших версий

;WITH cte 
    AS (SELECT iid, 
       item_id, 
       pg_purch_ind, 
       SUM_score1, 
       Row_number()OVER(partition BY item_id ORDER BY SUM_score1 DESC, iid % 100, iid) AS rn 
     FROM Yourtable) 
SELECT iid, 
     item_id, 
     pg_purch_ind, 
     SUM_score1, 
     cum_pg_purch 
FROM cte a 
     CROSS apply (SELECT Sum (pg_purch_ind) 
        FROM cte b 
        WHERE a.item_id = b.item_id 
          AND b.rn <= a.rn) cs (cum_pg_purch) 

Без генерации Row_Number довольно трудно обрабатывать в кресте применять Where положение из-модуля оператора

+0

Знаете ли вы, почему я получаю сообщение об ошибке? – Gavin

+0

@Gavin - Да, потому что вы используете версию Older Sql Server. 'Sum() over (order by)' введен в 'SQL SERVER 2012' –

Смежные вопросы