Я думаю, что вы в правильном направлении, и это может помочь, если я скажу, что вам нужно подходить к 6 различным ситуациям в течение данного месяца. Дело в том, что существует пересечение между рабочим периодом работника и данным месяцем.
Предположим:
- ч - дата проката
- T это термин_дата
- m - первый день данного месяца
- M - последний день данного месяца
См. Эти «временные шкалы»: (извините, немного сбивает с толку)
h..T..m........M...... (1- start and end before the month, no intersection)
......m..h..T..M...... (2- start and end inside the month, there is intersection)
......m........M..h..T (3- start and end after the month, no intersection)
h.....m........M.....T (4- start before the month, end after the month, intersection)
h.....m....T...M...... (5- start before the month, end inside the month, intersection)
......m...h....M.....T (6- start inside the month, end after the month, intersection)
Итак, есть пересечение, если h <= M и T> = m (ура, карта Карно!).
Чтобы проигнорировать последний день, как вы сказали, возможно, это будет: h m.
Создайте поле промежуточного итога, которое подсчитывает сотрудников по полу, если есть пересечение.
РЕДАКТИРОВАТЬ: Может быть, полная формула должна быть:
{EMPLOYEE.Hire_Date}<={?Last of Month} and (
isnull({EMPLOYEE.Termination_Date}) OR
{EMPLOYEE.Termination_Date}>={?First of Month}
)