Атрибут столбца T-SQL в вычисленном столбце - Недопустимое имя столбца
Я использую псевдоним для ссылки на вычисляемый столбец. Вот фрагмент реального кода, который я пытаюсь заставить работать, чтобы вычислить сходство и вернуть совпадения, где показатель сходства равен 3 или выше.
select [FirstName], difference([FirstName], 'mitch') as similarity
from [Dev].[dbo].[Name]
where similarity > 2
order by similarity desc
Сообщение об исключении:
Неверное имя столбца "сходство".
Как сходство не является реальной колонкой, как бы я сделал эту работу?
Ответы
Ответ 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