それを正しく行うのは簡単なことだと思います。
下のスクリーンショットでは、各ユーザー (userid) に 2 つの結果 (一種の重複) があります。
ユーザーごとに 1 つの結果のみを取得するようにクエリを修正する方法
(各ユーザーは 2 セットの「TimeIn」および「TimeOut」アクティビティを持つことができます)
したがって、特定のユーザーに2番目の「入り口」があるが、まだ出ていない場合、最初の閉じた入り口/休暇+ 2番目の入り口/まだ機能している必要があります
ここにストアドプロシージャがあります
create table #tmp (tId int, UserId int,
TimeIn1 smalldatetime, [TimeOut1] smalldatetime,
TimeIn2 smalldatetime, [TimeOut2] smalldatetime, tId2 int,
ActiveDate smalldatetime, ReasonID int, Name nvarchar(100), ReasonType nvarchar(100),
TotalMins int)
insert into #tmp (tId, UserId, TimeIn1, TimeOut1, ActiveDate, ReasonID, Name, ReasonType)
SELECT
t1.tId, t1.UserId, t1.TimeIn, t1.[TimeOut], t1.ActiveDate, t1.ReasonID, tblCustomers.name,tblTimeReas.ReasonType
FROM tblTime t1
inner join tblTimeReas on t1.ReasonID = tblTimeReas.ReasonID
inner join tblCustomers on t1.UserId=tblCustomers.custID
where (t1.userid in (select custID from tblCustomers where Classification =35) )
and (DATEPART(DAY,t1.timein)= DATEPART(DAY,GETDATE()))
and (DATEPART(MONTH,t1.timein)= DATEPART(MONTH,GETDATE()))
and (DATEPART(YEAR,t1.timein)= DATEPART(YEAR,GETDATE()))
update #tmp
set tId2 = (select top 1 tId from
tblTime t2 where (userid in (select custID from tblCustomers where Classification =35)) and DATEDIFF(day,t2.timein,#tmp.timein1)=0
and t2.tId>#tmp.tId order by tId asc)
update #tmp
set TimeIn2 = (select TimeIn from tblTime where tId=tId2),
TimeOut2 = (select [TimeOut] from tblTime where tId=tId2)
update #tmp set TotalMins = (
isnull(DATEDIFF(minute,timein1,timeout1),0)+
isnull(DATEDIFF(minute,timein2,timeout2),0)
)
select * from #tmp order by TimeIn1
drop table #tmp