У меня проблема с датами. У меня есть таблица с данными от и до даты для сотрудника. Для оценки я хотел бы отобразить каждую дату месяца с соответствующими значениями из второй таблицы sql.
Таблица SQL:
EmpNr | datefrom | dateto | hours
0815 | 01.01.2019 | 03.01.2019 | 15
0815 | 05.01.2019 | 15.01.2019 | 15
0815 | 20.01.2019 | 31.12.9999 | 40
Данный сотрудник (0815) работал с 01.01.-15.01. 15 часов, а в течение 20.01.-31.01. 40 часов
Я бы хотел получить следующий результат:
0815 | 01.01.2019 | 15
0815 | 02.01.2019 | 15
0815 | 03.01.2019 | 15
0815 | 04.01.2019 | NULL
0815 | 05.01.2019 | 15
...
0815 | 15.01.2019 | 15
0815 | 16.01.2019 | NULL
0815 | 17.01.2019 | NULL
0815 | 18.01.2019 | NULL
0815 | 19.01.2019 | NULL
0815 | 20.01.2019 | 40
0815 | 21.01.2019 | 40
...
0815 | 31.01.2019 | 40
Что касается дат, у нас есть:
declare @year int = 2019, @month int = 1;
WITH numbers
as
(
Select 1 as value
UNion ALL
Select value + 1 from numbers
where value + 1 <= Day(EOMONTH(datefromparts(@year,@month,1)))
)
SELECT b.empnr, b.hours, datefromparts(@year,@month,numbers.value) Datum FROM numbers left outer join
emptbl b on b.empnr = '0815' and (datefromparts(@year,@month,numbers.value) >= b.datefrom and datefromparts(@year,@month,numbers.value) <= case b.dateto )
, который работает довольно хорошо, но у меня есть странная проблема, что этот код соответствует только датам с 01.01.2019 по 03.01.2019
Большое спасибо заранее!