Вы можете использовать CROSS APPLY
(Oracle 12c):
select price, tax_rate, tax_amount, tax_amount+price as total
from Dual
CROSS APPLY (SELECT 999 AS price, 0.1 AS tax_rate FROM dual) s
CROSS APPLY (SELECT price*tax_rate AS tax_amount FROM dual) s2;
select price, tax_rate, tax_amount, tax_amount+price as total
from Dual
,LATERAL (SELECT 999 AS price, 0.1 AS tax_rate FROM dual) s
,LATERAL (SELECT price*tax_rate AS tax_amount FROM dual) s2;
db <> fiddle demo
Вы не можете ссылатьсяк определенным столбцам на том же уровне (SELECT
), но с помощью CROSS APPLY
/ LATERAL JOIN
вы можете создать цепочку вычисляемых столбцов без использования подзапросов.
Аналогичный подход: PostgreSQL с использованием вычисляемого столбцав том же запросе