Вставьте даты между начальной и конечной датой в SQL (ssms) - PullRequest
0 голосов
/ 27 сентября 2019

Привет! Мне нужно вставить все даты между startdate и enddate из casenumber - SQL (ssms).Таким образом, вместо одной строки на casenumber у casenumber будет строка для каждого дня.Таким образом, если между началом и окончанием дела будет 10 дней, в нем будет 10 строк.Если дело еще не завершено, в исходной таблице оно будет иметь NULL, но его следует заменить на getdate.Смотрите прикрепленное изображение.

изображение таблиц

1 Ответ

0 голосов
/ 27 сентября 2019

Это позволяет получить ваше изображение:

Настройка тестовых данных

create table #test (CaseNumber int, StartDate date, Enddate date)
insert into #test (CaseNumber, StartDate, Enddate)
values(1,'2019-09-18','2019-09-24'),(2,'2019-09-23',NULL)

Код

;with dt_seq as (
    select t.CaseNumber, t.StartDate, isnull(t.Enddate,cast (getdate() as date)) EndDate, t.StartDate [Date]
    from #test t
    union all
    select z.CaseNumber, z.StartDate, z.EndDate, case when z.[Date] < z.EndDate then dateadd(day,1,z.[Date]) else z.EndDate end [Date]
    from dt_seq z
    where z.[Date] <= dateadd(day,-1,z.EndDate)
    )
select c.*, ROW_NUMBER() over (partition by c.CaseNumber order by c.[Date]) [Duration]
from dt_seq c
 order by c.CaseNumber, c.[Date]
 option ( MaxRecursion 0 )

Reuslts

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...