Я считаю рабочие дни между двумя датами.Некоторые из моих результатов законно должны быть NULL, но некоторые возвращаются как NULL, а вместо этого должны быть 0. Это запрос, который я использую:
SELECT
ROW_NUMBER() OVER (ORDER BY Date_key asc) BusinessDaysID,
BSDAYS * CASE WHEN B.ClosingDate > B.ApprovalDate THEN -1 ELSE 1 END FinaldDateCount
FROM
DIM_DATE B
CROSS APPLY (
SELECT NULLIF(COUNT(*),0) BSDAYS
FROM CALENDAR
WHERE
BSDAYS >= CASE WHEN B.ClosingDate > B.ApprovalDate THEN B.ApprovalDate ELSE B.ClosingDate END
AND BSDAYS < CASE WHEN B.ClosingDate > B.ApprovalDate THEN B.ClosingDate ELSE B.ApprovalDate END
) R1
Source DIM_DATE B пример:
Date_Key ClosingDate ApprovalDate
38544 2018-01-18 2018-02-05
38545 NULL NULL
38546 NULL NULL
38547 NULL NULL
38548 2018-05-01 2018-05-01
38549 NULL NULL
38550 NULL NULL
38551 NULL NULL
38552 2018-03-08 2018-03-15
38553 NULL NULL
38554 NULL 2018-04-25
38555 NULL NULL
Исходный календарь Пример:
BSDAYS
2018-04-27
2018-04-30
2018-05-01
2018-05-02
2018-05-03
2018-05-04
2018-05-07
2018-05-08
2018-05-09
2018-05-10
2018-05-11
2018-05-14
2018-05-15
2018-05-16
2018-05-17
2018-05-18
2018-05-21
2018-05-22
2018-05-23
Вот что я получаю сейчас:
BusinessDaysID FinalDateCount
38544 12
38545 NULL
38546 NULL
38547 NULL
38548 NULL
38549 NULL
38550 NULL
38551 NULL
38552 5
38553 NULL
38554 NULL
38555 NULL
и я хотел бы:
BusinessDaysID FinalDateCount
38544 12
38545 NULL
38546 NULL
38547 NULL
38548 0
38549 NULL
38550 NULL
38551 NULL
38552 5
38553 NULL
38554 NULL
38555 NULL
Если вы заметили, что на Date_Key 38548 идет как NULL и должно быть 0.
Что не так с моим запросом, и как я могу это исправить?