2012-06-27 23 views
1

我有一個員工表和一個假期表,其中每行表示他們度假的一天。使用計數限制基於連接表的行

我想讓所有花費更多假期的員工獲得最大假期值。

employees: 
employeeId 
maxVacationDays 

vacations: 
employeeId 
date_vacation_day_taken 

查詢我現在有:

SELECT e.* 
FROM employees e 
     INNER JOIN vacations v ON (v.employeeId = e.employeeId) 
WHERE e.isActive = true AND (???? > e.maxVacationDays) 

所以我需要從休假表爲僱員獲得的行數。

我需要一個子查詢嗎?

(使用SQL2000)

回答

2

試試這個:

SELECT e.employeeId, v.maxVacationDays 
FROM employees e 
     INNER JOIN vacations v ON (v.employeeId = e.employeeId) 
WHERE e.isActive = true 
GROUP BY e.employeeId, v.maxVacationDays 
HAVING COUNT(v.employeeId) > v.maxVacationDays 
1
SELECT e.EmployeeId 
     ,COUNT(v.date_vacation_day_taken) TotalDaysTaken 
     ,e.maxVacationDays MaxDaysAllowed 
FROM Employees e 
    INNER JOIN vacations v 
     ON v.employeeId = e.employeeId 
WHERE e.isactive = true 
GROUP BY e.EmployeeId, e.maxVacationDays, e.isactive 
HAVING COUNT(v.date_vacation_day_taken) > e.maxVacationDays 
1

試試這個:

SELECT * FROM 
(
    SELECT e.employeeId, e.maxVacationDays, 
      SUM(v.date_vacation_day_taken) 'dayscount' 
    FROM employees e 
    INNER JOIN vacations v ON (v.employeeId = e.employeeId) 
    GROUP BY e.employeeId, e.maxVacationDays 
    WHERE e.isactive = true 
) sub 
WHERE sub.dayscount > e.maxVacationDays) 
1

也許這:

select e.employeeId, e.maxVacationDays, count(v.*) as vacationDaysTaken 
from employees e 
    join vacations v on e.employeeId = v.employeeId 
group by e.employeeId, e.maxVacationDays 
having e.maxVacationDays < count(v.*)