与此Oracle查询相同的SQL Server是什么?

时间:2012-01-09 15:35:26

标签: sql sql-server oracle

  

可能重复:
  Unable to run analytical function in 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 Server的查询:

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()部分,但总会出现相同的错误。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

看起来至少SQL Server 2005&amp ;;中不支持count(distinct ...) over(...)。 2008.见https://connect.microsoft.com/SQLServer/feedback/details/254393/over-clause-enhancement-request-distinct-clause-for-aggregate-functions

的最后答复

我没有找到关于2008 R2中是否支持此功能的参考资料。