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

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

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

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

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

11
задан Peter Lang 25 June 2014 в 15:20
поделиться

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
13
ответ дан 3 December 2019 в 07:37
поделиться

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

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

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

3
ответ дан 3 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: