SQL:在WHERE子句中使用SELECT中的计算字段

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
Run Code Online (Sandbox Code Playgroud)

我想在最后的WHERE条件中使用该排名.

现在我将此查询嵌套在另一个查询中并对那里的排名进行过滤,但是没有更简单或更快的方法从SELECT语句中过滤这些值吗?

mar*_*c_s 7

使用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!
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.在我问一个关于SQL查询的问题之前,我会问自己一个问题"CTE会成为一个解决方案吗?" (3认同)