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_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()
部分,但总是出现相同的错误。
我在做什么错?
我认为这里的问题可能是使用'PARTITION BY'。据我所知,SQL Server没有这个功能的直接等价物。一般来说,Oracle PL/SQL和Microsoft T-SQL有许多不兼容的功能,因此从两者中获取相同的行为并不总是可能的。 – 2012-01-09 16:18:55
@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
@Eric:谢谢,我不知道。 – 2012-01-09 17:45:05