2012-01-09 54 views
-2

Possible Duplicate:
Unable to run analytical function in Sql Server什么是此Oracle查询的SQL Server等效项?

我一直在试图运行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_IDLEVEL_IDFF_IDMODULE_IDTERR_IDMERGE_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有许多不兼容的功能,因此从两者中获取相同的行为并不总是可能的。 – 2012-01-09 16:18:55

+1

@DanielPryden - 这是不正确的。 SQL Server肯定有'分区'和'over'。正如我在这里回答这个问题:http://stackoverflow.com/questions/8791559/unable-to-run-analytical-function-in-sql-server/8791603#8791603,SQL Server不能做'count(distinct col)'当'count'是'over'子句的一部分时。 – Eric 2012-01-09 16:40:01

+0

@Eric:谢谢,我不知道。 – 2012-01-09 17:45:05

回答

相关问题