我正在使用别名来引用计算列.这是我正在努力工作的实际代码的片段,用于计算相似性并返回相似性得分为3或更高的匹配.
select [FirstName], difference([FirstName], 'mitch') as similarity
from [Dev].[dbo].[Name]
where similarity > 2
order by similarity desc
Run Code Online (Sandbox Code Playgroud)
错误:
select [FirstName], difference([FirstName], 'mitch') as similarity
from [Dev].[dbo].[Name]
where similarity > 2
order by similarity desc
Run Code Online (Sandbox Code Playgroud)
由于相似性不是一个真正的专栏,我将如何使这项工作?
Ada*_*son 37
列别名和计算SELECT
在查询的projection()阶段执行,该阶段发生在选择(WHERE
和JOIN
)阶段之后.因此,它们不能在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
Run Code Online (Sandbox Code Playgroud)
要么
select [FirstName], difference([FirstName], 'mitch') as similarity
from [Dev].[dbo].[Name]
where difference([FirstName], 'mitch') > 2
order by similarity desc
Run Code Online (Sandbox Code Playgroud)
ktu*_*nik 11
所有答案都可以解决您的问题,但对于复杂的情况,您无法复制查询.
正确的方法是使用CROSS和APPLY
select [FirstName], similarity
from [Dev].[dbo].[Name]
cross apply
(
select similarity =
difference([FirstName], 'mitch')
)computed_column
where similarity > 2
order by similarity desc
Run Code Online (Sandbox Code Playgroud)
whit CROSS和APPLY你可以在查询的任何地方使用你的计算列
尝试:
SELECT *
FROM (
SELECT [FirstName], difference([FirstName], 'mitch') as similarity
FROM [Dev].[dbo].[Name]
) a
WHERE similarity > 2
ORDER BY similarity desc
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26869 次 |
最近记录: |