在同一个 SELECT 命令中使用 CASE WHEN?
Use a CASE WHEN in the same SELECT command?
来自 Table 查询的简单 Select x, y , z 在 select.
中包含一个 "Case when"
此字段的结尾为 "End as 'result field'"。
我想在另一个命令中使用 'result field' 作为同一 SELECT 命令(Dateadd 命令)的一部分。
SELECT
PositionDate,
ISIN,
Issuer,
FirstCouponDate,
TermLength,
TermUnit,
CASE
WHEN TermUnit = 'Years' THEN 'year'
WHEN TermUnit = 'Months' THEN 'month'
END AS 'TermUnitRenamed',
DATEADD(TermUnitRenamed, TermLength, FirstCouponDate),
FROM
GIBDataWarehouse.dbo.vw_Positions
根据您提供的信息提出两个建议:在您的 CASE
语句中添加一个 ELSE
默认值;然后,将此查询嵌套在后续查询中,以便您可以引用新创建的字段。
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
来自 Table 查询的简单 Select x, y , z 在 select.
中包含一个 "Case when"此字段的结尾为 "End as 'result field'"。
我想在另一个命令中使用 'result field' 作为同一 SELECT 命令(Dateadd 命令)的一部分。
SELECT
PositionDate,
ISIN,
Issuer,
FirstCouponDate,
TermLength,
TermUnit,
CASE
WHEN TermUnit = 'Years' THEN 'year'
WHEN TermUnit = 'Months' THEN 'month'
END AS 'TermUnitRenamed',
DATEADD(TermUnitRenamed, TermLength, FirstCouponDate),
FROM
GIBDataWarehouse.dbo.vw_Positions
根据您提供的信息提出两个建议:在您的 CASE
语句中添加一个 ELSE
默认值;然后,将此查询嵌套在后续查询中,以便您可以引用新创建的字段。
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