Eri*_*ker 3 sql t-sql sql-server sql-server-2008
我有一个SQL查询,它做了一些排名,如下所示:
SELECT RANK() OVER(PARTITION BY XXX ORDER BY yyy,zzz,oooo) as ranking, * 
FROM SomeTable
WHERE ranking = 1 --> this is not possible
我想在最后的WHERE条件中使用该排名.
现在我将此查询嵌套在另一个查询中并对那里的排名进行过滤,但是没有更简单或更快的方法从SELECT语句中过滤这些值吗?
使用CTE(公用表表达式) - 仅用于下一个语句的"内联"视图:
;WITH MyCTE AS
(
    SELECT 
        RANK() OVER(PARTITION BY XXX ORDER BY yyy,zzz,oooo) as ranking, 
        * 
    FROM SomeTable
) 
SELECT * 
FROM MyCTE
WHERE ranking = 1 --> this is now possible!