首页 > 解决方案 > 如何将列别名到另一个操作中

问题描述

我想使用 Elias 列 startdate 到 anthor 操作来计算

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,

标签: c#sqlsql-serversql-server-2012

解决方案


用于定义子句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)

请注意,我添加了表别名,因此查询更易于编写和阅读。


推荐阅读