【发布时间】:2015-10-01 01:44:41
【问题描述】:
我在 Sql server 中有一个表,其中包含部门名称、员工和薪水。我想检索每个部门中薪水在前 10 个值中的所有员工。基本上,对部门名称进行分区,按薪水排序,然后从部门获得第 10 个薪水,并让每个薪水大于或等于第 10 个薪水的人... 我该怎么做?
【问题讨论】:
标签: sql sql-server sql-server-2014
我在 Sql server 中有一个表,其中包含部门名称、员工和薪水。我想检索每个部门中薪水在前 10 个值中的所有员工。基本上,对部门名称进行分区,按薪水排序,然后从部门获得第 10 个薪水,并让每个薪水大于或等于第 10 个薪水的人... 我该怎么做?
【问题讨论】:
标签: sql sql-server sql-server-2014
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()。
【讨论】:
如果我理解正确,您想使用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
【讨论】: