SQL Select 计算 where 子句
Posted
技术标签:
【中文标题】SQL Select 计算 where 子句【英文标题】:SQL Select calculation in where clause 【发布时间】:2016-01-25 18:18:23 【问题描述】:我有一个 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 ...
但这似乎不太优雅。有没有更好的办法?
【问题讨论】:
SELECT * FROM(your query here) WHERE rnum=1 或使用 CTE 是最常用的解决方案 您能否发布架构以及您想要的结果? 感谢 Mihai - 效果很好 :-) 【参考方案1】:您需要使用派生表(子查询/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
【讨论】:
val3后面的逗号需要去掉【参考方案2】:试试:
Select * from (
SELECT
ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum, val3
FROM TestDb )TestDb
Where (rnum = 1)
【讨论】:
以上是关于SQL Select 计算 where 子句的主要内容,如果未能解决你的问题,请参考以下文章