如何将列别名为另一个操作
How to alias column into another operation
我想使用 Alias 列开始日期到另一个操作中来计算
CASE WHEN GETDATE() > detail.PeriodEndDate THEN GETDATE()
ELSE detail.PeriodEndDate
END as StartDate,
CASE
WHEN usrPlan.PackagePlanId = 1 THEN DATEADD(month, 1, StartDate)
ELSE DATEADD(YEAR, 1, StartDate)
END as EndDate,
使用CROSS APPLY
在FROM
子句中定义别名。然后它在整个查询中可用:
SELECT . . .,
v.StartDate,
(CASE WHEN up.PackagePlanId = 1 THEN DATEADD(month, 1, v.StartDate)
ELSE DATEADD(YEAR, 1, v.StartDate)
END) as EndDate,
FROM usrPlan up . . .
detail d . . .
CROSS APPLY
(VALUES (CASE WHEN GETDATE() > d.PeriodEndDate THEN GETDATE()
ELSE d.PeriodEndDate
END)
) v(StartDate)
请注意,我添加了 table 别名,以便查询更易于编写和阅读。
我个人的偏好是使用 CTE 定义开始日期列,然后在后续查询中使用它 - 这样可以避免代码重复。
所以,类似于:
; with r as (
SELECT *
, CASE WHEN GETDATE() > detail.PeriodEndDate THEN GETDATE()
ELSE detail.PeriodEndDate
END as StartDate
FROM [sourceTable]
)
SELECT *
, CASE WHEN PackagePlanId = 1 THEN DATEADD(month, 1, StartDate)
ELSE DATEADD(YEAR, 1, StartDate)
END as EndDate
FROM r
我想使用 Alias 列开始日期到另一个操作中来计算
CASE WHEN GETDATE() > detail.PeriodEndDate THEN GETDATE()
ELSE detail.PeriodEndDate
END as StartDate,
CASE
WHEN usrPlan.PackagePlanId = 1 THEN DATEADD(month, 1, StartDate)
ELSE DATEADD(YEAR, 1, StartDate)
END as EndDate,
使用CROSS APPLY
在FROM
子句中定义别名。然后它在整个查询中可用:
SELECT . . .,
v.StartDate,
(CASE WHEN up.PackagePlanId = 1 THEN DATEADD(month, 1, v.StartDate)
ELSE DATEADD(YEAR, 1, v.StartDate)
END) as EndDate,
FROM usrPlan up . . .
detail d . . .
CROSS APPLY
(VALUES (CASE WHEN GETDATE() > d.PeriodEndDate THEN GETDATE()
ELSE d.PeriodEndDate
END)
) v(StartDate)
请注意,我添加了 table 别名,以便查询更易于编写和阅读。
我个人的偏好是使用 CTE 定义开始日期列,然后在后续查询中使用它 - 这样可以避免代码重复。
所以,类似于:
; with r as (
SELECT *
, CASE WHEN GETDATE() > detail.PeriodEndDate THEN GETDATE()
ELSE detail.PeriodEndDate
END as StartDate
FROM [sourceTable]
)
SELECT *
, CASE WHEN PackagePlanId = 1 THEN DATEADD(month, 1, StartDate)
ELSE DATEADD(YEAR, 1, StartDate)
END as EndDate
FROM r