【问题标题】:Restrict rows based on a join table, using a count使用计数限制基于连接表的行
【发布时间】:2012-06-27 15:28:23
【问题描述】:

我有一个员工表和一个假期表,其中每一行代表他们休假的一天。

我想让所有休假天数超过其最大休假天数的员工。

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)

所以我需要从休假表中获取该employeeId 的行数。

我需要一个子查询吗?

(使用sql2000)

【问题讨论】:

    标签: sql sql-server sql-server-2000


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

      【解决方案2】:

      试试这个:

      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)
      

      【讨论】:

        【解决方案3】:

        也许是这样的:

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

        【讨论】:

          【解决方案4】:
          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
          

          【讨论】:

            猜你喜欢
            • 2016-09-26
            • 2019-07-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-01-20
            • 1970-01-01
            • 2019-09-06
            • 1970-01-01
            相关资源
            最近更新 更多