2016-11-08 54 views
0

有此查询(请参阅下面): 我希望能够使用ROW_NUMBER()函数返回薪水第二高的记录。我知道如何使用该函数,但由于我有一个子查询,我无法弄清楚该把它放在哪里。使用ROW_NUMBER()查找Sql Server中的第二高

查询返回:

Yuriana Hagasawa NULL China Project Manager 56000.00 
Venessa Katarina Cameron Denmark  Tech Lead 185000.00 
Sahi King NULL Denmark  Design Engineer 156000.00 
Chen Chen NULL Andorra  Project Manager 76000.00 

因此,使用行数函数我只想与SAHI王者归来的记录。谢谢。

SELECT C.[First Name], 
C.[Last Name], 
C.[Middle Name], 
C.[Country Name], 
C.[Designation Name], 
Salary.Emp_Salary AS 'Current Salary' 
    FROM 
    (
    SELECT 
     Emp_First_Name AS "First Name", 
     Emp_Last_Name AS "Last Name", 
     Emp_Middle_Name AS "Middle Name", 
     Country_Name AS "Country Name", 
     Desig_Name as "Designation Name", 
     MAX(Emp_Salary_Change_Year) AS "Change Year" 

     FROM Employee_Details AS e 

    INNER JOIN Country AS co ON e.Emp_Country_Id = co.Country_Id 
    INNER JOIN State AS s ON e.Emp_State_Id = s.State_Id 
    INNER JOIN Designation AS d ON e.Desig_Id = d.Desig_Id 
    INNER JOIN Salary AS sa ON e.Emp_Id = sa.Emp_Id 

    GROUP BY Emp_First_Name, Emp_Last_Name, 
    Emp_Middle_Name, Country_Name, Desig_Name) AS C 
    INNER JOIN Salary ON C.[Change Year] = Salary.Emp_Salary_Change_Year; 

回答

3

你可以尝试用ROW_NUMBERORDER BY Salary.Emp_Salary DESC下面这一点,如果你只需要在第二个最高再增加一个where条件如下WHERE RowNo = 2

SELECT * FROM (
SELECT C.[First Name], 
    C.[Last Name], 
    C.[Middle Name], 
    C.[Country Name], 
    C.[Designation Name], 
    Salary.Emp_Salary AS 'Current Salary', 
    ROW_NUMBER() OVER (ORDER BY Salary.Emp_Salary DESC) As RowNo 
     FROM 
     (
     SELECT 
      Emp_First_Name AS "First Name", 
      Emp_Last_Name AS "Last Name", 
      Emp_Middle_Name AS "Middle Name", 
      Country_Name AS "Country Name", 
      Desig_Name as "Designation Name", 
      MAX(Emp_Salary_Change_Year) AS "Change Year" 

      FROM Employee_Details AS e 

     INNER JOIN Country AS co ON e.Emp_Country_Id = co.Country_Id 
     INNER JOIN State AS s ON e.Emp_State_Id = s.State_Id 
     INNER JOIN Designation AS d ON e.Desig_Id = d.Desig_Id 
     INNER JOIN Salary AS sa ON e.Emp_Id = sa.Emp_Id 

     GROUP BY Emp_First_Name, Emp_Last_Name, 
     Emp_Middle_Name, Country_Name, Desig_Name) AS C 
     INNER JOIN Salary ON C.[Change Year] = Salary.Emp_Salary_Change_Year) t 
WHERE RowNo = 2; 
+0

RowNo = 2去哪?我试着把它放在最后,并得到语法错误 –

+0

我已更新查询,请看看 – Aruna

+0

谢谢它的工作。 –