我有一个表格和如下所示的数据:
员工:
Id DepartmentId
1 100
2 100
3 100LeaveRequest:
Id SentFromEmployeeId SentToEmployeeId
1 1 2
2 1 2
3 2 3LeaveUpdateLogs:
Id RequestedDate LeaveRequestId Status
1 2021-11-01 11:55:56 1 Pending
2 2021-11-02 10:55:56 1 Accepted
3 2021-11-03 11:55:56 1 Accepted
4 2021-11-04 09:55:56 1 Declined
5 2021-11-05 10:55:56 1 Closed
6 2021-11-06 05:55:56 2 Pending
7 2021-11-07 05:55:56 2 Accepted
8 2021-11-08 02:55:56 2 Accepted
9 2021-11-09 05:55:56 2 Declined
10 2021-11-10 05:55:56 2 Closed现在,我想计算特定部门的统计数据,如下所示:
DepartmentId 100的sent和received请求总数。
但我在这里对获取"Sent“和"Received”的数据感到困惑,如下所示:
select SentFromEmployeeId,SentToEmployeeId,* from LeaveUpdateLogs l
inner join LeaveRequest lr on l.LeaveRequestId = lr.Id
inner join Employee e1 on e1.Id = lr.SentFromEmployeeId
inner join Employee e2 on e2.Id = lr.SentToEmployeeId
where (l.RequestedDate >= '2021-11-01' and l.RequestedDate < '2021-11-16')
and (e1.DepartmentId =100 or e2.DepartmentId = 100)但是这并没有返回任何数据,尽管我在这两个日期之间有"25“条记录。当我注释掉这3行时:
inner join Employee e1 on e1.Id = lr.SentFromEmployeeId
inner join Employee e2 on e2.Id = lr.SentToEmployeeId
(e1.DepartmentId =100 or e2.DepartmentId = 100)那么查询可以正常工作,但是我想要获取特定部门的数据。
有人能帮我修正一下这个逻辑吗?
发布于 2021-11-15 22:03:46
由于我认为你只是在问如何连接多个值,这里有几种你可以解决这个问题的方法。
inner join Employee e1 on e1.Id in (lr.SentFromEmployeeId, lr.SentToEmployeeId)或
inner join Employee e1 on e1.Id = lr.SentFromEmployeeId
OR e1.Id = lr.SentToEmployeeIdhttps://stackoverflow.com/questions/69979944
复制相似问题