재귀 관계와 상대 테이블이있는 테이블에 문제가 있습니다. 저의 목표는 감독자이며 검토가 수행되지 않은 직원이 할당되었거나 가장 최근에 검토 한 지 3 개월이 지난 모든 직원을 확보하는 것입니다.
다음은 스키마입니다.
종업원
| ID | Name| BirtDate| Salary | SupervisorID |
이 Employee
테이블 Supervisor
은 Employee
.
리뷰
| ID | PerfomanceRating| Comment| ReviewDate| EmployeeID|
이 유형의 쿼리를 생각해 냈지만 작동하지 않습니다.
SELECT
(FName + ' ' + LName) AS Name, Employee.ID AS superID
FROM
Employee
WHERE
Employee.IsSupervisor = '1'
AND (SELECT COUNT(*)
FROM Employee
LEFT JOIN Review ON Employee.ID = Review.EmployeeId
WHERE Employee.SupervisorID = Employee.ID
GROUP BY ReviewDate
HAVING ReviewDate IS NULL
OR MAX(ReviewDate) < DATEADD(month, -3, GETDATE())) > 0
그래서 하루의 끝에서 나는 필요 EmployeeID
와 Name
리뷰는 수행하거나 가장 최근의 리뷰가 3 개월 이상 전에 수행 직원이있는 관리자의.
누구든지 그것을 달성하는 방법에 대한 아이디어가 있습니까?
먼저 감독자의 ID employee
를 얻고 조인하여 이름을 얻습니다.
그런 다음 employee
다시 가입하여 이번에는 각 감독 아래에있는 직원을 확보합니다.
그런 다음 ReviewDate
각 직원 의 최대 값 을 반환하는 쿼리에 조인합니다 .
마지막으로 감독자별로 그룹화하고 having
절에 조건을 설정하십시오 .
select (se.fname + ' ' + se.lname) Name, s.id superID
from (select distinct supervisorid id from employee) s
inner join employee se on se.id = s.id
inner join employee e on e.supervisorid = s.id
left join (
select employeeid, max(reviewdate) reviewdate
from review
group by employeeid
) r on r.employeeid = e.id
group by s.id, se.fname, se.lname
having count(case when coalesce(r.reviewdate, dateadd(month, -4, getdate())) < dateadd(month, -3, getdate()) then 1 end) > 0
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다