Sql 使用计数基于联接表限制行

Sql 使用计数基于联接表限制行,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,我有一个employee表和一个vacations表,其中每一行代表他们休假的一天 我想让所有休假天数超过其最大休假天数价值的员工都参与进来 employees: employeeId maxVacationDays vacations: employeeId date_vacation_day_taken 我现在的问题是: SELECT e.* FROM employees e INNER JOIN vacations v ON (v.employeeId = e.emp

我有一个employee表和一个vacations表,其中每一行代表他们休假的一天

我想让所有休假天数超过其最大休假天数价值的员工都参与进来

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)
所以我需要从休假表中获取该员工ID的行数

我需要一个子查询吗

(使用sql2000)

尝试以下操作:

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)
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
试试这个:

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)
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
也许是这样:

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.*)
选择e.employeeId,e.maxVacationDays,将(v.*)计为vacationDaysTaken
来自雇员
加入e.employeeId=v.employeeId上的假期
按e.employeeId、e.maxVacationDays分组
e.maxVacationDays<计数(v.*)的
可能是这样的:

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.*)
选择e.employeeId,e.maxVacationDays,将(v.*)计为vacationDaysTaken
来自雇员
加入e.employeeId=v.employeeId上的假期
按e.employeeId、e.maxVacationDays分组
e.maxVacationDays<计数(v.*)的
试试这个:

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)
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
试试这个:

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)
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