Повторное использование поля с псевдонимом в операторе SQL SELECT

Я хотел бы добиться чего-то вроде этого:

SELECT 
  (CASE WHEN ...) AS FieldA,
  FieldA + 20 AS FieldB
FROM Tbl

Предполагая, что с помощью "..." я заменил длинный и сложный оператор CASE, я не хочу повторять его при выборе FieldB и вместо этого использовать псевдоним FieldA .

Обратите внимание, что это вернет несколько строк, поэтому DECLARE/SET вне оператора SELECT в моем случае не годится.


person Иван Грозный    schedule 15.03.2010    source источник


Ответы (2)


В качестве обходного пути можно использовать подзапрос:

SELECT
  FieldA,
  FieldA + 20 AS FieldB
FROM (
  SELECT 
    (CASE WHEN ...) AS FieldA
  FROM Tbl
) t

Чтобы улучшить читаемость, вы также можете использовать CTE:

WITH t AS (
  SELECT 
    (CASE WHEN ...) AS FieldA
  FROM Tbl
)
SELECT
  FieldA,
  FieldA + 20 AS FieldB
FROM
  t
person Peter Lang    schedule 15.03.2010
comment
Лично я нахожу производную таблицу более легкой для чтения, но это только я. - person HLGEM; 16.03.2010

Когда у меня есть сложная логика для вычисления «виртуального» значения столбца из других значений столбца в таблице, я обычно создаю однотабличное представление исходной таблицы со всеми исходными столбцами, а также с вычисленными значениями. Затем я делаю другие SELECT против представления. Это позволяет мне:

  1. Чтобы назвать мои вычисляемые столбцы.

  2. Чтобы логика для вычислений была в одном месте, а не разбрасывалась по разным запросам в приложении.

person Larry Lustig    schedule 15.03.2010
comment
Это не повлияет на производительность, если только вы не используете движок, предлагающий материализованные представления, и вы создаете его как материализованное представление, и в этом случае вы снизите производительность записи, но повысите производительность запросов. - person Larry Lustig; 13.05.2014