在SQL中查找给定月份中薪水最高的员工姓名

时间:2014-05-09 16:15:13

标签: sql sql-server join sql-order-by

我有两个表,第一个是Employee,第二个是Salary。

员工:

Employee

薪酬:

Salary

这是两张桌子的结构,我需要找到2014年2月薪水最高的人的姓名。

我尝试了以下查询但没有得到正确的输出。

select first_name+' '+last_name as Name from Employee where 
(select top(1)empid from Salary order by salary_amt desc)

5 个答案:

答案 0 :(得分:2)

您只需加入empId上的第一个和第二个表即可。使用max(salary_amt)并确保在where子句中添加日期条件,如@Lamak所述

答案 1 :(得分:1)

这应该有效:

选择 EMPID,
FIRST_NAME,
姓氏,
sum(salary_amt)为salary_in_month

工资s 在s.empID = e.empID上加入员工e 其中
月(salary_month)= 2
和年份(salary_month)= 2014年 empID组 总和(salary_amt)desc的订单 限制1

答案 2 :(得分:1)

select first_name+' '+last_name as Name 
from Employee e
    join Salary s
        On s.EmpId = e.EmpId
           and salary_Month = 'Feb 2014'
           and cast(s.Salary_amt as money) =
              (Select Max(cast(Salary_amt as money)) 
               from salary
               Where salary_Month = 'Feb 2014')

注意:Salary.Salary_month和Salary.empId上应该有一个唯一的备用复合键。

答案 3 :(得分:0)

感谢各位朋友的回答。我将salary_amt的数据类型更改为金钱,工作答案是:

select top(1)first_name+' '+last_name as Name 
from Employee e
join Salary s
On s.EmpId = e.EmpId
and salary_Month = 'Feb 2014' order by salary_amt desc

答案 4 :(得分:0)

Empp有两列= id,name
工资有四列= sal_id,id,sal,month

让给定的月份为“ jan”

SELECT E1.name, S1.sal FROM Empp E1 INNER JOIN salary S1 ON E1.id = S1.id where 
S1.sal = (select max(S2.sal) from Salary S2
where S2.month='jan');