2016-11-08 7 views
0

ROW_NUMBER()関数を使用して2番目に高い給与のレコードを返すことができるようにします。私は関数の使い方を知っていますが、サブクエリがあるのでどこに置くのか分かりません。ROW_NUMBER()を使用して2番目に高い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

あなたはこのために、以下のようORDER BY Salary.Emp_Salary DESCROW_NUMBERを試すことができますし、あなただけが必要な場合は二番目に高いが、その後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

ありがとうそれは働いた。 –

関連する問題