我想将此Metical查询转换为SQL Server 2005查询

时间:2011-09-16 11:49:22

标签: sql sql-server sql-server-2005

DELETE FROM rpt62_attribution_value
WHERE  elo_id NOT IN(SELECT elo_id
                     FROM   (SELECT elo_id,
                                    elo_value,
                                    attr_value,
                                    ilo_flag,
                                    ROW_NUMBER() OVER (PARTITION BY elo_value,
                                    attr_value ORDER BY
                                    elo_id)
                                            Rank
                             FROM   rpt62_attribution_value) tmp
                     WHERE  rank = 1
                     ORDER  BY 1);  

1 个答案:

答案 0 :(得分:3)

要在SQL Server中将其设置为有效查询,只需删除ORDER BY 1,因为在子查询和派生表中不允许这样做,除非指定TOP并且不提供任何功能。

然而,看起来你正在删除重复项,所以这样的事情可能会更好

;WITH T AS
(                     
SELECT ROW_NUMBER() OVER (PARTITION BY elo_value, attr_value 
                              ORDER BY elo_id) [Rank]
 FROM   rpt62_attribution_value    
 )
 DELETE FROM T WHERE [Rank] > 1