2011-12-05 3 views
-1

"tblEmployee"という名前のテーブルがあります.2つのカラムが "EmpName"と "Salary" ... 5 rowsどのようにSQLサーバのテーブルから3番目に高い給与と従業員の名前を取得する

| EmpName | Salary | 
|---------|--------| 
| john | 80000 | 
| ann  | 20000 | 
| james | 40000 | 
| smith | 90000 | 
| rudolph | 30000 | 

従業員の名前とともにtblEmployeeテーブルから3番目に高い給与を取得したいと考えています。 つまり、私の出力はjames、この場合は40000になるはずです。

ありがとうございます。

答えて

3

あなたは行うことができます:

SELECT TOP 1 * 
FROM (SELECT TOP 3 EmpName, Salary FROM tblEmployees ORDER BY Salary DESC) AS E 
ORDER BY E.Salary ASC 

すなわち、それらの順序を逆に給与することにより、トップ3人の従業員を選択して、SQL Serverの2005+の場合は、トップ1.

4

を選択:

WITH cteRowNums AS (
    SELECT EmpName, Salary, 
      ROW_NUMBER() OVER(ORDER BY Salary DESC) AS RowNum 
     FROM tblEmployee 
) 
SELECT EmpName, Salary 
    FROM cteRowNums 
    WHERE RowNum = 3; 

結束の可能性を考慮して、ROW_NUMBER()機能をDENSE_RANK()に置き換えることができます。

0

テーブルに重複したレコードがある場合には動作しない行番号が使用されている場合は、上記の回答で最初に指摘したいことがあります。あなたは上記のクエリが正しい結果をもたらすことはない別のものを使用して終了する必要があります。

同じ機能を実現する方法はたくさんあります。あなただけの最高給与を見つける必要があるなら、あなたは従業員のn番目の最高給与を見つけるために、サブクエリ

Select Max(Salary) from Employees where Salary < (Select Max(Salary) from Employees) 

SQLクエリを使用して、従業員表の第二最高給与を見つけるために

Select Max(Salary) from Employees 

SQLクエリを使用することができますCTE

012を使用して、従業員表のn番目の最高給与を見つけるために、サブクエリ

SELECT TOP 1 SALARY 
FROM (
     SELECT DISTINCT TOP N SALARY 
     FROM EMPLOYEES 
     ORDER BY SALARY DESC 
    ) RESULT 
ORDER BY SALARY 
// Replace the N with the highest number which you need to find. 

SQLクエリを使用して使用してテーブルあなたは私のブログHow to find nth highest salary using SQL query

に同じの詳細を知ることができ、従業員テーブルに

WITH RESULT AS 
    (
     SELECT SALARY,EmpName, 
       DENSE_RANK() OVER (ORDER BY SALARY DESC) AS DENSERANK 
     FROM EMPLOYEES 
    ) 
    SELECT TOP 1 SALARY,EmpName 
    FROM RESULT 
    WHERE DENSERANK = 3 

を第三最高の給料を得るために

WITH RESULT AS 
(
    SELECT SALARY, 
      DENSE_RANK() OVER (ORDER BY SALARY DESC) AS DENSERANK 
    FROM EMPLOYEES 
) 
SELECT TOP 1 SALARY 
FROM RESULT 
WHERE DENSERANK = N 

関連する問題