Как псевдоним столбца в другую операцию - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу использовать начальную дату столбца Elias в 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,

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Мое личное предпочтение - использовать CTE для определения столбца startdate, а затем использовать его в следующем запросе - это позволяет избежать дублирования кода.

Итак, что-то вроде:

; 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
0 голосов
/ 09 апреля 2020

Используйте 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)

Обратите внимание, что я добавил псевдонимы таблиц, чтобы легче было писать и читать запрос.

...