SQL在where

时间:2016-01-25 18:18:24

标签: sql tsql

我有一个select语句,对于其中一个返回值,我使用了一个计算。

我想要做的是在where子句中使用计算结果。像这样:

SELECT 
ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum,
val3,
FROM TestDb 
Where (rnum = 1) 

但它不喜欢rnum中的where

我正在考虑创建一个表并添加到该表中。然后我就可以select where rnum ...但这看起来并不优雅。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您需要使用派生表(子查询/ cte):

WITH cte AS
(
  SELECT ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum,
         val3
  FROM TestDb
)
SELECT *
FROM cte
WHERE rnum = 1;

如果您想知道为什么不能直接使用它,请阅读SQL Condition on Window function

答案 1 :(得分:1)

尝试:

Select * from (
SELECT 
ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum, val3
FROM TestDb )TestDb 
Where (rnum = 1)