SQL:使用WHERE子句中SELECT的计算字段
我有一个SQL查询,它会进行一些排序,如下所示: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语句中筛选此类值吗?抱歉前面的帖子,
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