2017-07-11 25 views
0

發佈類似於多次詢問的問題的道歉。我找不到另一個會返回其他字段以及薪水字段的線程。我的SQL在下面,我只是用我正在查找的數字替換3。但是,我不知道如何從tblPerson返回Name,Age和City字段。我知道需要有某種子查詢,但我一直無法弄清楚。任何幫助將非常感激。先謝謝你!SQL子查詢將返回第N個最高薪水以及名稱,城市等

Select TOP 1 Salary 
FROM 
    (Select DISTINCT TOP 3 Salary 
    FROM tblPerson 
    Order By Salary DESC) Result 
ORDER BY Salary 
+0

讓我知道,如果我解決工作或拋出錯誤 –

回答

1

只需添加你想要的子查詢返回到SELECT子句中必須要包含在result表中的列是什麼。但也要記住在外部查詢中包含這些列,以便它們出現在最終結果中。像這樣的:

Select TOP 3 result.salary, result.name, result.age, result.city 
FROM 
    (Select DISTINCT TOP 3 tblPerson.salary, tblPerson.name, 
     tblPerson.age,tblPerson.city 
     FROM tblPerson 
     Order By Salary DESC) result 
ORDER BY Salary 

result從子查詢表看起來像這樣:

salary name  age city 
90000 Mr.derp 21 Minneapolis 
80000 Ms.herp 52 St.Paul 
70000 Mr.blah 89 Fakecity 

它有3行事業的關鍵字TOP 3和列作爲tblPerson.salary, tblPerson.name, tblPerson.age,tblPerson.cityselect子句中的結果。然後,我們可以簡單地使用外部查詢從該表中進行選擇。

如果您想要每列或指定列名稱所需的列,可以使用select *。您可以在TOP n中更改n以查看要從頂部選擇多少行。

+0

完美,謝謝! – Chuck0185

+0

但是,這不會返回關係。 –

+0

您可以使用rank()獲取關係 –

0

沒有嘗試,計算機上,但讓我知道這個結果/錯誤:

Select TOP 1 a.Salary, a.Name, a.Age, a.City 
FROM 
tblPerson a 
inner join 
(Select DISTINCT TOP 3 Salary 
    FROM tblPerson 
    Order By Salary DESC 
)Result 
on a.Salary = Result.Salary 
ORDER BY a.Salary 
0

我看到使用選擇頂部的做法其他答案。我會更傾向於這一點,但只是個人喜好。

SELECT * FROM (
    SELECT * 
    ,Row_Number() OVER(ORDER BY Salary DESC) AS rown 
    FROM tblPerson 
) AS x WHERE rown = '3' 

行號分配給表中的每一行,按工資排序。然後你可以使用哪裏選擇第n行,在這種情況下薪水。

爲了得到相匹配的第n起薪,所有記錄的列表:

SELECT * FROM tblPerson as p 
INNER JOIN (
    SELECT Salary FROM(
     SELECT Salary 
     ,Row_Number() OVER(ORDER BY Salary DESC) AS rown 
     FROM tblPerson 
    ) AS x1 WHERE rown = '3' 
) AS x2 on x2.salary = p.salary 
+0

這是一個很好的電話,但我遇到了一個問題。如果我想挑選出第四高的薪水,但是如果有多個薪水相同的人,我想要全部退回? – Chuck0185

+0

@ Chuck0185這可以使用Row_Number()方法實現,但需要連接。我可以在一個例子中編輯,但O.KOO的解決方案可能更簡潔。 –

相關問題