2012-01-09 2 views
-2

Possible Duplicate:
Unable to run analytical function in Sql ServerЧто такое эквивалент SQL Server этого запроса Oracle?

Я пытаюсь запустить аналитическую функцию на SQL-сервере, но у меня возникают трудности.

Вот мой запрос в синтаксисе Oracle, который хорошо работает:

SELECT 
    TEAM_ID, 
    LEVEL_ID, 
    FF_ID, 
    MODULE_ID, 
    TERR_ID, 
    MERGE_KEY, 
    count(distinct TERR_ID) over (partition by TEAM_ID,LEVEL_ID,FF_ID,MODULE_ID) 
    || ' of ' || 
    count(distinct TERR_ID) over (partition by TEAM_ID,LEVEL_ID,FF_ID) 
    as MISMATCH_TERR_COUNT_IN_FF 
FROM SCN7BBFE80210E04E2F88653A.PA83FB9BD57E044618B7AC86A; 

Но я получаю сообщение об ошибке при попытке сделать то же самое для SQL Server.

Я создал таблицу с колоннами TEAM_ID, LEVEL_ID, FF_ID, MODULE_ID, TERR_ID и MERGE_KEY, а затем вставленных значений в таблицу, как так:

insert into PA83FB9BD57E044618B7AC86A values('3',1,'YH','PERF','3XBDA3',1)   
insert into PA83FB9BD57E044618B7AC86A values('3',1,'YH','PERF','3XAJA3',1) 

Вот запрос, я использую для SQL Сервер:

SELECT 
    TEAM_ID, 
    LEVEL_ID, 
    FF_ID, 
    MODULE_ID, 
    TERR_ID, 
    MERGE_KEY, 
    ISNULL(CAST(count(distinct TERR_ID) OVER(PARTITION BY TEAM_ID, LEVEL_ID, FF_ID, MODULE_ID) AS nvarchar(max)), '') 
    + ' of ' + 
    ISNULL(CAST(count(distinct TERR_ID) OVER(PARTITION BY TEAM_ID, LEVEL_ID, FF_ID) AS nvarchar(max)), '') 
    AS MISMATCH_TERR_COUNT_IN_FF 
FROM dbo.PA83FB9BD57E044618B7AC86A 

Когда я пытаюсь запустить этот запрос, я получаю следующее сообщение об ошибке:

ERROR:Incorrect syntax near 'distinct'. 

Я попытался создать минимальный запрос, который дает ту же ошибку, и я пришел с этим:

SELECT 
    TEAM_ID, 
    LEVEL_ID, 
    FF_ID, 
    MODULE_ID, 
    TERR_ID, 
    MERGE_KEY, 
    cast(count(distinct TERR_ID) OVER(PARTITION BY TEAM_ID, LEVEL_ID, FF_ID, MODULE_ID) 
    AS MISMATCH_TERR_COUNT_IN_FF 
FROM dbo.PA83FB9BD57E044618B7AC86A 

И я все еще получаю ошибку:

ERROR:Incorrect syntax near 'distinct' 

Я также попытался удалить cast() часть также, но такая же ошибка всегда появляется.

Что я делаю неправильно?

+0

Я думаю, что здесь может быть проблема 'PARTITION BY'. Насколько мне известно, SQL Server не имеет прямого эквивалента этой функции. В общем, Oracle PL/SQL и Microsoft T-SQL имеют много несовместимых функций, поэтому не всегда можно получить одинаковое поведение от обоих. –

+1

@ DanielPryden - Это неверно. У SQL Server, безусловно, есть 'partition by' и' over'. Поскольку я ответил на этот вопрос здесь: http://stackoverflow.com/questions/8791559/unable-to-run-analytical-function-in-sql-server/8791603#8791603, SQL Server не может выполнять 'count (col col)' когда 'count' является частью предложения' over'. – Eric

+0

@ Эрик: Спасибо, я этого не знал. –

ответ

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