В таблице указано, где каждая запись является уникальным событием.Каждая запись имеет время начала и время окончания.Каждое событие представляет число человеко-часов в журнале.
Я хочу создать запрос, который дублирует каждую запись один раз для каждого часа дня, который он охватывает, и связывает дублирующую запись с часом дня, который он представляет.Я также хочу, чтобы первичный ключ повторялся с дублирующимися записями.
Время начала и окончания - это даты и время.
У меня есть только доступ на чтение, что сильно ограничивает меня.
Например, как у меня выглядит:
pk StartTime EndTime
1 Start date 1am End date 3am
Что я хочу:
pk HourOfDay
1 1 am
1 2 am
Я хочу это для всех записей в таблице в результате одного запроса.
Цель состоит в том, чтобы определить истинный самый загруженный час дня и определить дни, когда спрос на услуги был выше, чем численность персонала.
То, что я пробовал с тех пор, как Дейл Баррелл ответил превосходно, этоприсоединение табличной переменной рекомендованным способом, но у меня возникают трудности с условным соединением.
Я пытался после создания табличных переменных, как это предлагается в решении 1 ниже, я попытался выполнить следующее условноеприсоединяйтесь и продолжайте получать синтаксические ошибки:
select
T.id
,H.[Hour]
from
@TimeSheet as T
inner join @Hour as H on
case
when datepart(hour, StartTime) < datepart(hour, EndTime)
then H.[Hour] >= datepart(hour, T.StartTime)
and H.hour < datepart(hour, T.EndTime)
when datepart(hour, StartTime) > datepart(hour, EndTime)
then H.[Hour] <= datepart(hour, T.StartTime)
and H.hour > datepart(hour, T.EndTime)
else datepart(hour, StartTime) = H.[Hour]
end
sample data for case 1, start hour > end hour
pk start end
1 '2018-01-01 01:00:000' '2018-01-01 02:00:00
sample data for case 2, start hour < end hour
pk start end
1 '2018-01-01 22:00:000' '2018-01-02 01:00:00
sample data for case 3, start hour = end hour
pk start end
1 '2018-01-01 01:00:000' '2018-01-01 01:30:00