Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:使用WHERE子句中SELECT的计算字段_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

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

SQL:使用WHERE子句中SELECT的计算字段,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个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语句中筛选此类值吗?抱歉前面的帖子,

我有一个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语句中筛选此类值吗?

抱歉前面的帖子,我忘记了:窗口功能只能在SELECT或order by子句中使用。 您必须使用子查询:

SELECT * FROM 
(
  SELECT RANK() OVER(PARTITION BY XXX ORDER BY yyy,zzz,oooo) as ranking, * 
  FROM SomeTable
) t
WHERE ranking = 1
或者CTE

在下一条语句中使用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!

谢谢。下一次在我问一个关于SQL查询的问题之前,我会问自己“CTE是否是一个解决方案?”这是可行的,但这是我已经做过的(嵌套),我有点要求其他方法来做这件事。这是可行的,但这是我已经做过的(嵌套),我有点要求其他方法来做这件事。这就是为什么我接受了马克的答案,他是唯一一个给我其他解决方案的人。
select * from (
select RANK() OVER(PARTITION BY name ORDER BY id) as ranking, *  
from PostTypes
) A
where A.ranking = 1