我希望得到所有员工的结果

时间:2016-12-29 16:52:38

标签: sql-server vb.net

我有以下代码,但我没有得到真正的结果。 我只得到一个员工的结果,我想要的是我桌子上的所有员工。

代码是:

Select * From
     (Select EmpNo, EmpEName 
      from EmployeeMainFile 
      Group By EmpNo, EmpEName) s2
  INNER Join 
     (Select DISTINCT EmpSNo,EmpSTotalSalary 
      from EmpSalary where ID = 
          (Select Max(ID) from EmpSalary) 
           Group by EmpSNo,EmpSTotalSalary) s1
    on s1.EmpSNo = s2.EmpNo

2 个答案:

答案 0 :(得分:1)

因为子查询表达式Select Max(ID) from EmpSalary仅返回整个工资集的一个ID。您需要每个员工的最大(ID)。

如果ID s依次增加,ID(每个员工)的最大值代表该员工的最新,当前工资,那么:

Select e.EmpNo, e.EmpEName, Max(EmpSTotalSalary) MaxSalary
From EmployeeMainFile e
    Join EmpSalary s
       on s.EmpSNo = e.EmpNo
          and s.ID = (Select Max(ID) 
                    from EmpSalary 
                    Where EmpSNo = s.EmpSNo)
Group By e.EmpNo, e.EmpEName

答案 1 :(得分:0)

Select * From
     (Select EmpNo, EmpEName 
      from EmployeeMainFile 
      Group By EmpNo, EmpEName) s2
  INNER Join 
     (Select EmpSNo,Max(EmpSTotalSalary) from EmpSalary 
           Group by EmpSNo) s1
    on s1.EmpSNo = s2.EmpNo

更新的答案

Select * From
     (Select EmpNo, EmpEName 
      from EmployeeMainFile 
      Group By EmpNo, EmpEName) as s2
  INNER Join 
     (
      SELECT * FROM 
      (
      Select EmpSNo,ROW_NUMBER()OVER(PARTITION BY EmpSNo ORDER BY TIMESTAMP DESC) as Latest
      from EmpSalary 
       ) AS ABC
       WHERE ABC.Latest =1 ) as s1
    on s1.EmpSNo = s2.EmpNo