Подтвердить что ты не робот

Атрибут столбца T-SQL в вычисленном столбце - Недопустимое имя столбца

Я использую псевдоним для ссылки на вычисляемый столбец. Вот фрагмент реального кода, который я пытаюсь заставить работать, чтобы вычислить сходство и вернуть совпадения, где показатель сходства равен 3 или выше.

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

Сообщение об исключении:

Неверное имя столбца "сходство".

Как сходство не является реальной колонкой, как бы я сделал эту работу?

4b9b3361

Ответ 1

Алиасы столбцов и вычисления выполняются в фазе проекции (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

Ответ 2

Все ответы могут решить вашу проблему, но для сложной ситуации вы просто не можете дублировать свой запрос.

Правильный способ - использовать 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 вы можете использовать свой вычисленный столбец везде в запросе

Ответ 3

Try:

SELECT * 
  FROM (
        SELECT [FirstName], difference([FirstName], 'mitch') as similarity
            FROM [Dev].[dbo].[Name]
        ) a
WHERE similarity > 2
ORDER BY similarity desc

Ответ 4

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

Вы не можете ссылаться на псевдонимы столбцов в разделе where