Sql 为每个类别选择前5名薪资

Sql 为每个类别选择前5名薪资,sql,sql-server-2008,select,Sql,Sql Server 2008,Select,我有一张和这张相似的桌子: id sml desc amount 1 23 bla 100 2 23 bla 50 3 23 bla 30 4 23 bla 20 1 40 bla1 100 2 40 bla2 23 3 40 bla3 34 4 40 bla4 34 它是来自其他表的多个联接的结果。我想为每个sml值选择金额列中价值最高的五名员工 下面的示例输出:我的

我有一张和这张相似的桌子:

id   sml  desc amount
1     23   bla   100
2     23   bla   50
3     23   bla   30
4     23   bla   20
1     40   bla1  100
2     40   bla2  23
3     40   bla3  34
4     40   bla4  34
它是来自其他表的多个联接的结果。我想为每个sml值选择金额列中价值最高的五名员工

下面的示例输出:我的示例没有五个sml,所以我只使用了两个。另外,如果第5和第6个值相等,我想返回这两个值

id   sml  desc amount
1     23   bla   100
2     23   bla   50
1     40   bla1  100
2     40   bla2  100
3     40   bla3  34
我尝试了以下查询:

select [MS_EmployeeNumber],[SA_Semel],[Description],sum([MS_Amount]) as Amount,
rank() over (Partition BY [SA_Semel], [Description]

select [MS_EmployeeNumber],[SA_Semel],[Description],sum([MS_Amount]) as Amount,
rank() over (Partition BY [SA_Semel], [Description]
                ORDER BY sum([MS_Amount]) Desc) AS Rank
from [dbo].[MonthlySalary] as sml
inner join [dbo].[SmlAnalyse] as SA on SA.SA_Semel = sml.MS_Semel
inner join [dbo].[SalarySMLlist] as list on list.Semel = SA.SA_Semel
group by [MS_EmployeeNumber],[SA_Semel],[Description]
order by SA_Semel, Amount desc

当我管理这个职位的时候,他把工作放在全桌上,考虑我在MsSeMell上做排名的要求。

< P>我觉得你的询问太复杂了。rank或相当密集的_rank,根据您处理重复项的方式,已经为您提供了每个sml的排名,现在您只需要进行相应的筛选:

SELECT [id], [sml], [desc], [amount]
FROM   (SELECT [id], [sml], [desc], [amount], 
               DENSE_RANK() OVER (PARTITION BY [sml] ORDER BY [amount] DESC) rk
        FROM   [dbo].[MonthlySalary]) t
WHERE  rk <= 5

我觉得你的问题太复杂了。rank或相当密集的_rank,根据您处理重复项的方式,已经为您提供了每个sml的排名,现在您只需要进行相应的筛选:

SELECT [id], [sml], [desc], [amount]
FROM   (SELECT [id], [sml], [desc], [amount], 
               DENSE_RANK() OVER (PARTITION BY [sml] ORDER BY [amount] DESC) rk
        FROM   [dbo].[MonthlySalary]) t
WHERE  rk <= 5

我不确定我是否听懂了。你能分享一下你想从这个输入样本中得到的结果吗?我没有分析你的整个查询。似乎您已经知道如何使用秩,所以只需将查询添加为子查询和外部选择,并使用where条件rankI(我不确定我是否遵循)。你能分享一下你想从这个输入样本中得到的结果吗?我没有分析你的整个查询。似乎您已经知道如何使用秩,所以只需将您的查询添加为子查询和外部选择,其中条件rankI认为秩比稠密秩更合适。考虑值为100100100100100100、99、98、97、96的情况。我把这个问题理解为只想要100个,而不是全部。我认为排名比密集排名更合适。考虑值为100100100100100100、99、98、97、96的情况。我把这个问题理解为只想要100个,而不是全部。