簡體   English   中英

計算列上的 T-SQL 列別名 - 列名無效

[英]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 )階段執行,該階段發生在選擇( 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

所有答案都可以解決您的問題,但對於復雜的情況,您無法復制您的查詢。

正確的方法是使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM