Я хотел бы достигнуть чего-то вроде этого:
SELECT
(CASE WHEN ...) AS FieldA,
FieldA + 20 AS FieldB
FROM Tbl
Принятие этого "..." Я заменил долгий и сложный Оператор выбора, я не хочу повторять его при выборе FieldB
и используйте искаженный FieldA
вместо этого.
Обратите внимание на то, что это возвратит несколько строк, следовательно DECLARE
/SET
вне SELECT
оператор бесполезен в моем случае.
Обходным решением будет для использования подзапроса:
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
Когда у меня есть сложная логика для вычисления значения "виртуального" столбца из значений других столбцов в таблице, я обычно создаю однотабличное представление исходной таблицы со всеми исходными столбцами плюс вычисленные значения. Затем я делаю другие SELECT'ы по этому представлению. Это позволяет мне:
Давать имена моим вычисляемым столбцам.
Хранить логику вычислений в одном месте, а не разбрасывать ее по различным запросам в приложении.