[英]T-SQL Column alias on computed column - Invalid column name
我使用別名來引用計算列。 這是我正在嘗試制作的實際代碼的片段,用於計算相似度並返回相似度得分為 3 或更高的匹配項。
select [FirstName], difference([FirstName], 'mitch') as similarity
from [Dev].[dbo].[Name]
where similarity > 2
order by similarity desc
異常消息:
列名“相似性”無效。
由於相似性不是真正的專欄,我將如何進行這項工作?
列別名和計算在查詢的投影( SELECT
)階段執行,該階段發生在選擇( 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
或者
select [FirstName], difference([FirstName], 'mitch') as similarity
from [Dev].[dbo].[Name]
where difference([FirstName], 'mitch') > 2
order by similarity desc
所有答案都可以解決您的問題,但對於復雜的情況,您無法復制您的查詢。
正確的方法是使用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
whit CROSS 和 APPLY 你可以在查詢的任何地方使用你的計算列
嘗試:
SELECT *
FROM (
SELECT [FirstName], difference([FirstName], 'mitch') as similarity
FROM [Dev].[dbo].[Name]
) a
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 2 desc
您不能在 where 子句中引用列別名
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.