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

Я хотел бы достичь чего-то подобного:

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

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

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

2 ответов


workaroud будет использовать подзапрос:

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

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

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

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