#sql #date #ms-access #count
#sql #Дата #ms-access #количество
Вопрос:
Может кто-нибудь помочь мне со следующей проблемой. У меня есть таблица MS Access, скажем, с моими сотрудниками, и для каждого из них у меня есть дата начала и окончания их отпуска:
Name begin end
John 1.3.2021. 15.3.2021.
Robert 6.3.2021. 8.3.2021.
Lisa 13.3.2021. 16.3.2021.
John 1.4.2021. 3.4.2021.
Robert 2.4.2021. 2.4.2021.
Lisa 15.5.2021. 23.5.2021.
Lisa 5.6.2021. 15.6.2021.
Как получить результат с количеством сотрудников, которые отсутствуют на работе на каждую дату из таблицы (даты, которые включены в интервалы начало-конец). Например:
1.3.2021. 1 '>>>only John
2.3.2021. 1 '>>>only John
3.3.2021. 1 '>>>only John
4.3.2021. 1 '>>>only John
5.3.2021. 1 '>>>only John
6.3.2021. 2 '>>>John and Robert
7.3.2021. 2 '>>>John and Robert
...
Заранее благодарю!
Ответ №1:
Вы можете использовать union
для объединения таблиц и связанного подзапроса:
select dte,
(select count(*)
from t
where d.dte between t.[begin] and t.[end]
) as cnt
from (select [begin] as dte
from t
union
select [end]
from t
) d;
Комментарии:
1. Спасибо! Это было быстро :). Это кажется очень близким к решению, но не все даты указаны в результате. Например, я получаю результат для 1.3.2021. а следующий — для 6.3.2021.
2. @Mario . , , В вашем вопросе говорится: «на каждую дату из таблицы». Если вам нужны промежуточные даты, вам также понадобится таблица календаря.
3. Здравствуйте, я меняю только даты, которые определяются интервалами (начало-конец), как в моем примере. результат. Могут ли эти даты каким-либо образом извлекаться из этих интервалов вместо таблицы календаря? Я ценю вашу помощь.
4. @Mario . , , на самом деле не в MS Access. Вам нужна таблица календаря.
5. ОК. Я создал таблицу календаря и скорректировал последнюю часть вашего sql-оператора, и это работает — так что большое вам спасибо!