Если вы хотите повторно использовать вычисления в вашем SELECT
для других столбцов в пределах выбора или в других частях запроса, вам нужно переместить вычисления в подвыбор или CTE. E.g.:
SELECT
--Useful columns for final result (e.g. other columns from your original query)
CASE WHEN dem_days <= 0 THEN 0 END AS 'test1',
CASE WHEN det_days <= 0 THEN 0 END AS 'test2'
FROM
(
SELECT
--Other columns (not shown in OPs question)
DATEDIFF(d, vso.pod_ata, ISNULL(cncr.cntr_date3, GETUTCDATE())) - 14 AS dem_days, -- Date difference to work out Demurrage days
DATEDIFF(d, cncr.dc_ata, ISNULL(cncr.empty_return_dt, GETUTCDATE())) - 21 AS det_days
FROM
--Original Query
) t
t
после заключительной конечной скобки только потому, что у выбранной таблицы есть для псевдонима.
Если у вас есть расчеты, основанные на вычислениях, основанных на расчетах (и т. Д.), Тогда стиль дополнительного выбора может начать выглядеть немного уродливым / запутанным, поэтому форма CTE может быть предпочтительной:
;With FirstCalcs as (
SELECT BaseColumn1,BaseColumn2,CalculatedColumn1,CalculatedColumn2
FROM ....
), SecondCalcs as (
SELECT BaseColumn1,BaseColumn2,CalculatedColumn1,CalculatedColumn3 --3 depends on 1 & 2
FROM FirstCalcs
), ThirdCalcs as (
SELECT BaseColumn1,BaseColumn2,CalculatedColumn1
FROM SecondCalcs
WHERE CalculatedColumn3 = <Condition>
)
SELECT <Final result columns>
FROM ThirdCalcs
И, по крайней мере, таким образом, гнездо не выходит из-под контроля.