Мне нужно создать отчет для SQL Server Reporting Services (SSRS), где пользователь может предоставить имена и диапазоны дат сотрудников, и он вернет не только активность сотрудников между этими датами, но и других сотрудников внутри временной диапазон до и после них. Это используется для отслеживания потенциальных случаев и выяснения того, кто еще мог вступить в контакт с этим человеком. Я могу заставить эти две отдельные части работать, но я не могу найти способ перебрать результаты.
Переменные, которые будут установлены пользователями:
@Person varchar(max)
@Begin datetime2
@End datetime2
Запрос 1:
SELECT Admitted,
Time,
Person,
Door
FROM DoorJournal
WHERE Person like @Person
AND Time BETWEEN @Begin AND @End
Из запроса 1 я хочу открыть дверь и время доступа человека и передать его на следующий запрос
@Door varchar(max)
@Entry datetime2
Запрос 2:
SELECT Admitted,
Time,
Person,
Door
FROM DoorJournal
WHERE Door like @Door
AND Time BETWEEN (DateAdd(minute,-2,@Entry) AND (DateAdd(minute,15,@Entry)
Затем я хочу объединить эти результаты, чтобы мы получили представление, подобное этому
Admitted Time Door Person
Yes 9:05 Door 1 Person 1
Yes 9:06 Door 1 Person 2
Yes 9:07 Door 1 Query 1 Person
Yes 9:10 Door 1 Person 3
Yes 10:15 Door 2 Person 5
Yes 10:16 Door 2 Query 1 Person
Yes 10:21 Door 2 Person 4
Запрос будет выполняться против одного человека за раз, но через каждую дверь, через которую проходит человек, и время до и после того, как они go через дверь должны быть включены, чтобы было несколько значений для двери и времени.
Я не уверен, как передать информацию из одного запроса в другой. Я пытался с некоторыми подзапросами, но никогда не получал ничего, чтобы функционировать, как ожидалось.
SELECT Admitted,
Time,
Person,
Door
FROM (SELECT Admitted,
Time,
Person,
Door
FROM DoorJournal
WHERE Person like @Person
AND Time BETWEEN @Begin AND @End) AS P
WHERE Door IN (P.Door)
AND Time BETWEEN (DateAdd(minute,-2,P.Time) AND (DateAdd(minute,15,P.Time)
Добавление решения на основе предложения Алана:
Select Time, Door
INTO #specific
WHERE Person like @Person
AND Time BETWEEN @Begin AND @End
SELECT Admitted,
Time,
D.Person,
Door
FROM DoorJournal D
INNER JOIN #specific s ON D.Person = S.Person
WHERE D.Door = S.Door
AND D.Time BETWEEN (DateAdd(minute,-2,S.Time) AND (DateAdd(minute,15,S.Time)