如何通过deptname

时间:2017-01-21 07:17:05

标签: sql-server-2008-r2

我有两个表Employee和Dept,如下所示

EIN | ENAME   | Salary  | DeptID
 1  | Ravi    |   500   | 10
 2  | Krishna |  1000   | 20
 3  | Kiran   |  1500   | 20

DeptID | DeptName
  10   | IT
  20   | Finance

我希望输出作为员工以及由部门获得最高工资组的Deptname

1 个答案:

答案 0 :(得分:0)

这是一个不使用分析函数的选项:

SELECT e.ENAME,
       COALESCE(d.DeptName, 'NA') AS DeptName,
       t.max_salary
FROM Employee e
LEFT JOIN Dept d
    ON e.DeptID = d.DeptID
INNER JOIN
(
    SELECT DeptID, MAX(SALARY) AS max_salary
    FROM Employee
    GROUP BY DeptId
) t
    ON e.DeptID = t.DeptID AND
       e.Salary = t.max_salary

请注意,如果多个员工在给定部门中具有最高薪水,则此查询将返回所有关联。如果没有进一步的信息,这似乎是合理的,但无法区分一个员工与另一个员工。

<强>更新

您还可以使用包含相关子查询的WHERE子句,而不是像上面给出的那样连接到(非相关)子查询。这是什么样的:

SELECT e.ENAME,
       COALESCE(d.DeptName, 'NA') AS DeptName,
       e.Salary
FROM Employee e
LEFT JOIN Dept d
    ON e.DeptID = d.DeptID
WHERE e.Salary = (SELECT MAX(t.Salary) FROM Employee t WHERE t.DeptID = e.DeptID)

但是,我建议使用第一个选项,因为它可能比相关子查询选项表现更好。