【问题标题】:retrieve all rows over a certain value检索超过某个值的所有行
【发布时间】:2015-10-01 01:44:41
【问题描述】:

我在 Sql server 中有一个表,其中包含部门名称、员工和薪水。我想检索每个部门中薪水在前 10 个值中的所有员工。基本上,对部门名称进行分区,按薪水排序,然后从部门获得第 10 个薪水,并让每个薪水大于或等于第 10 个薪水的人... 我该怎么做?

【问题讨论】:

标签: sql sql-server sql-server-2014


【解决方案1】:
select 
    * 
from (
    select 
        Department Name], [Employee], [Salary], 
        DepartmentSalaryRN = dense_rank() over(partition by [Department Name] order by [Salary] desc)
    from 
        [dbo].[TableName]
) t
where 
    DepartmentSalaryRN >= 10
order by
    [Department Name], DepartmentSalaryRN

听起来你想要dense_rank()。如果您希望每个部门最多有 10 名员工,请使用 row_number()。

【讨论】:

  • 这回答了我的问题:)。与此同时,我的老板改变了主意,他实际上希望通过 row_number() 获得订单,从第 10 行获得薪水,并让所有薪水高于此的人......
【解决方案2】:

如果我理解正确,您想使用TOP 语句。试试下面的方法。

SELECT TOP 10 [Department Name], [Employee], [Salary]
FROM [dbo].[TableName]
WHERE [Department Name] = 'Name of Department'
ORDER BY [Salary] DESC

这将检索给定部门中薪水最高的 10 名员工的信息。

更多关于TOP的信息可以在这里找到:
https://msdn.microsoft.com/en-us/library/ms189463.aspx

【讨论】:

    猜你喜欢
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2022-01-19
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多