【问题标题】:SQL Select calculation in where clauseSQL Select 计算 where 子句
【发布时间】: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) 

但它不喜欢rnumwhere 中。

我正在考虑创建一个表并添加到该表中。然后我就可以select where rnum ... 但这似乎不太优雅。有没有更好的办法?

【问题讨论】:

  • SELECT * FROM(your query here) WHERE rnum=1 或使用 CTE 是最常用的解决方案
  • 您能否发布架构以及您想要的结果?
  • 感谢 Mihai - 效果很好 :-)

标签: sql tsql


【解决方案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) 

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多