Можно ли создать псевдоним выражения, возвращаемого оператором SELECT, чтобы ссылаться на него в других частях этого же SELECT, как если бы он был столбцом среди других?
Этакий "временный"переменная ", область действия которой будет ограничена оператором SELECT, немного похоже на предложение WITH перед SELECT для использования временного именованного набора записей.
Наивный пример того, чего я хотел бы достичь:
SELECT
FIRSTNAME + ' ' + NAME AS FULLNAME,
CASE WHEN LEN(FULLNAME)>3 THEN 1 ELSE 0 END AS ISCORRECT
FROM USERS
, где FULLNAME может использоваться для определения последующего поля вывода ISCORRECT , но не является реальным столбцом таблицы USERS ...вместо этого трудоемкого (но работающего), подверженного ошибкам (но работающего) копирования / вставки:
SELECT
FIRSTNAME + ' ' + NAME AS FULLNAME,
CASE WHEN LEN(FIRSTNAME + ' ' + NAME)>3 THEN 1 ELSE 0 END AS ISCORRECT
FROM USERS
Этот пример хорошо описывает то, что я хочу, но я легко могу представить аналогичные потребности, где FULLNAME также может бытьиспользуется в других частях оператора SELECT: в JOIN, в WHERE, в GROUP BY, ORDER BY и т. д.
PS: я использую SQL Server 2005, но также был бы заинтересован в любых спецификациях 2008 годаic answer.
Большое спасибо!: -)
Редактировать:
Несмотря на мое высокое уважение к тем из вас, кто предлагает использовать сторонний или внутренний запрос, я не чувствуюЛегко с такими возможностями.Мой образец действительно наивный.Истинные запросы - это, скорее, 30 выходных полей, включая сложные выражения (включая вызовы функций CLR), 15 внутренних / левых внешних объединений и 20 дополнительных критериев.Я подозреваю, что я скорее не умножал на множество косвенных указаний на совместные запросы, если смогу избежать этого.