一尘不染

计算列上的T-SQL列别名-无效的列名

sql

我使用别名来引用计算列。这是我尝试制作的实际代码的一部分,用于计算相似度并返回相似度得分为3或更高的匹配项。

select [FirstName], difference([FirstName], 'mitch') as similarity
from [Dev].[dbo].[Name]
where similarity > 2
order by similarity desc

异常消息:

无效的列名“相似性”。

由于相似性不是真正的专栏文章,我将如何进行这项工作?


阅读 228

收藏
2021-03-10

共1个答案

一尘不染

SELECT在查询的投影()阶段执行列别名和计算,该阶段在选择(WHEREJOIN)阶段之后发生。因此,无法在WHERE子句或JOIN条件中引用它们,因为它们尚不存在。您可以将带有SELECT子句的查询用作子查询,也可以在WHERE子句中重复计算:

select *

from
(select [FirstName], difference([FirstName], 'mitch') as similarity
from [Dev].[dbo].[Name]) src

where similarity > 2
order by similarity desc

或者

select [FirstName], difference([FirstName], 'mitch') as similarity
from [Dev].[dbo].[Name]
where difference([FirstName], 'mitch') > 2
order by similarity desc
2021-03-10