Повторно использовать псевдоним поля в операторе SQL SELECT - PullRequest
11 голосов
/ 15 марта 2010

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

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

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

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

Ответы [ 2 ]

13 голосов
/ 15 марта 2010

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
3 голосов
/ 15 марта 2010

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

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

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

...