Считайте активную систему по месяцам - PullRequest
0 голосов
/ 25 мая 2020

У меня есть [Системная] таблица с полем ContractDateEnd. Если это значение равно нулю, система «активна»

Моя цель - рассчитать количество активных систем по месяцам для текущего года

Итак, для каждого месяца я должен суммировать систему, если ContractEndDate = NULL или Month (ContractEndDate)> = Номер месяца

Create  TABLE Systems (
[ID] int,
[ContractStartDate] date,
[ContractEndDate] date)

INSERT INTO Systems ([ID], [ContractStartDate], [ContractEndDate])
VALUES 
(1, '1/1/2018', '08/30/2020'),
(2, '1/1/2019', '05/31/2020'),
(3, '1/6/2020', NULL)

Мне удалось получить активные месяцы по системному идентификатору

ID January February March April May June July August September October November December
1    1        1        1    1    1   1    1     1       0        0        0        0
2    1        1        1    1    1   0    0     0       0        0        0        0
3    1        1        1    1    1   1    1     1       1        1        1        1

Но я хотел бы иметь это:

 Month        Total

 January       3
 February      3
 March         3
 April         3
 May           3
 June          2
 July          2
 August        2
 September     1
 October       1
 November      1
 December      1

Это решение SQL Подсчет по дате активности использовать Join, но не считать нули ..

Как это сделать?

Спасибо Марко

1 Ответ

0 голосов
/ 25 мая 2020

Попробуем использовать такой запрос:

SELECT Month = DATENAME(MONTH, DATEFROMPARTS(2000, MonthNumber, 1)),
       Sum   = SUM(IIF(MonthNumber <= ISNULL(MONTH(Systems.ContractEndDate), 12), 1, 0))
FROM (
     VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12)
) AS Months (MonthNumber)
CROSS JOIN #Systems AS Systems
GROUP BY MonthNumber
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...