我一直在尝试在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 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()
部分,但总会出现相同的错误。
我做错了什么?
答案 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中是否支持此功能的参考资料。