Выражение CASE для данных больше нуля за последние три месяца - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь создать поле для отображения активного или неактивного на основе следующих критериев:

Имеет 'A' в активном или прекращенном доходе поля больше нуля за последние 4 месяца (включая текущий месяц)

SELECT [NAME CODE]
  ,[NAME]
  ,[ACTIVE OR TERMINATED]
  ,REV.[REVENUE AMOUNT]
  ,REV.[MONTH]
  ,REV.[YEAR]
,CASE
  WHEN [ACTIVE OR TERMINATED] = 'A' 
  AND YEAR(GETDATE())= REV.[YEAR]
  AND [REVENUE AMOUNT] > 0
  AND REV.[MONTH] = FORMAT(DATEADD(month,-2 ,getdate()),'MM')
  AND REV.[MONTH] = FORMAT(DATEADD(month,-3 ,getdate()),'MM')
  THEN 'ACTIVE'
  ELSE 'INACTIVE'
END as [ACTIVE FLAG]
  FROM [ACTIVE_TABLE].[DBO]
  LEFT JOIN [REVENUE TABLE].[DBO] REV on [NAME CODE] = REV.[NAME CODE]

1 Ответ

0 голосов
/ 01 октября 2019

Если у вас есть одна строка для каждого месяца, вы можете использовать оконные функции. Ваш вопрос немного сложен для отслеживания - и не согласуется с запросом (в одном случае вы упоминаете доход, но он не отображается в запросе). Идея примерно такая:

SELECT . . . ,
       (CASE WHEN SUM(REV.REVENUE) OVER (PARTITION BY REV.[NAME CODE]
                                         ORDER BY REV.MONTH
                                         ROWS BETWEEN 3 PRECEDING AND CURRENT ROW
                                        ) > 0
             THEN 'ACTIVE' ELSE 'TTERMINATED'
        END) as ACTIVEFLAG
FROM [ACTIVE_TABLE].[DBO] LEFT JOIN
     [REVENUE TABLE].[DBO] REV 
     ON [NAME CODE] = REV.[NAME CODE];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...