Два предложения на основе предоставленной вами информации: добавьте ELSE
значение по умолчанию к вашему CASE
заявлению; затем вложите этот запрос в последующий, чтобы вы могли ссылаться на новое созданное поле.
select
*
, case
when TermUnitRenamed = 'year' then DateAdd(year, TermLength, FirstCouponDate)
when TermUnitRenamed = 'month' then DateAdd(month, TermLength, FirstCouponDate)
when TermUnitRenamed = 'day' then DateAdd(day, TermLength, FirstCouponDate)
end as newDate
from (
select
PositionDate
, ISIN
, Issuer
, FirstCouponDate
, TermLength
, TermUnit
, case
when TermUnit = 'Years' then 'year'
when TermUnit = 'Months' then 'month'
else 'day' -- assumes default 'day' unit
end AS TermUnitRenamed
from GIBDataWarehouse.dbo.vw_Positions
) x
Конечно, , вы можете просто применить логику CASE
и DATEADD
в самом исходном запросе и вообще избежать вложения, если вам не нужно TermUnitRenamed
для чего-либо еще.
select
PositionDate
, ISIN
, Issuer
, FirstCouponDate
, TermLength
, TermUnit
, case
when TermUnit = 'Years' then DateAdd(year, TermLength, FirstCouponDate)
when TermUnit = 'Months' then DateAdd(month, TermLength, FirstCouponDate)
else then DateAdd(day, TermLength, FirstCouponDate) -- assumes default 'day' unit
end AS newDate
from GIBDataWarehouse.dbo.vw_Positions