Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL子查询返回第n个最高工资以及姓名、城市等_Sql_Sql Server_Ssms - Fatal编程技术网

SQL子查询返回第n个最高工资以及姓名、城市等

SQL子查询返回第n个最高工资以及姓名、城市等,sql,sql-server,ssms,Sql,Sql Server,Ssms,为发布一个类似于已被问过多次的问题而道歉。我找不到另一个线程,该线程将返回其他字段以及薪资字段。我的SQL在下面,我只是用我正在查找的数字或替换3。但是,我不知道如何从tblPerson返回Name、Age和City字段。我知道需要某种类型的子查询,但我还没有弄明白。任何帮助都将不胜感激。提前谢谢你 Select TOP 1 Salary FROM (Select DISTINCT TOP 3 Salary FROM tblPerson Order By Salar

为发布一个类似于已被问过多次的问题而道歉。我找不到另一个线程,该线程将返回其他字段以及薪资字段。我的SQL在下面,我只是用我正在查找的数字或替换3。但是,我不知道如何从tblPerson返回Name、Age和City字段。我知道需要某种类型的子查询,但我还没有弄明白。任何帮助都将不胜感激。提前谢谢你

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

只需将您希望子查询返回的内容添加到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
子查询中的
结果
表如下所示:

salary  name       age  city
90000   Mr.derp    21   Minneapolis
80000   Ms.herp    52   St.Paul
70000   Mr.blah    89   Fakecity
它有三行是关键字
TOP3
的原因,列是
select
子句中
tblPerson.salary、tblPerson.name、tblPerson.age、tblPerson.city
的结果。然后我们可以简单地使用外部查询从这个表中进行选择


如果需要每一列,您可以使用
选择*
,或者使用列名指定所需的列。您可以在
TOP n
中更改
n
,以查看要从顶部选择的行数。

未在计算机上尝试,但请告诉我此操作的结果/错误:

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

我使用“选择顶部”方法看到了其他答案。我更倾向于这样,但只是个人偏好

SELECT * FROM (
    SELECT *
    ,Row_Number() OVER(ORDER BY Salary DESC) AS rown
    FROM tblPerson
) AS x WHERE rown = '3'
行号按薪资顺序分配给表中的每一行。然后可以使用where来选择第n行,在本例中为salary

要获取与第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

这是一个很好的电话,但是我遇到了一个问题。例如,如果我想选择第四高的薪水,但如果有多个人拥有相同的薪水,我想返回他们所有人呢?@Chuck0185这可以使用Row_Number()方法实现,但需要加入。我可以在示例中进行编辑,但O.KOO的解决方案可能更简洁。如果我的解决方案有效或出现错误,请告诉我。但是,这不会返回关系。您可以使用rank()获取关系