SQL一步提取每个类别的最大值

SQL一步提取每个类别的最大值,sql,sql-server,sql-server-2000,greatest-n-per-group,Sql,Sql Server,Sql Server 2000,Greatest N Per Group,我有一些数据如下所示: Sector Category rec_coun ------ -------- --------- A 25 53 A 24 1911 A 23 2010 A .. ..

我有一些数据如下所示:

Sector           Category         rec_coun
------           --------         ---------
A                25               53
A                24               1911
A                23               2010
A                ..               ..
A                1                190
B                25               787877
B                24               931231231
B                ..               ..
8                1                778787
..
C                1                6666
我想得到的是一个表格,显示每个扇区与扇区和类别组合中的最大记录数相关的类别,例如

Sector                Category        Max Recs
------                --------        --------
A                     23              2010
B                     24              931231231
....
在我上面的例子中。我希望能一步到位。我试过了

select distinct [Sector], [Category], max(rec_cnt) 
from table
group by [Sector], [Category]
having rec_cnt = max(rec_cnt)

但这不好。如果可能的话,我宁愿避免嵌套查询中的内部联接,但要把最好的保存到最后。实际上,我使用的是SQL Server 2000,这可能会使这个问题变得更加棘手。

我相信即使在SQL Server 2000上,使用嵌套的
分组方式也应该可以

select t.[Sector], table.[Category], t.max_rec
from table 
join
(
  select distinct [Sector], max(rec_cnt) max_rec
  from table 
  group by [Sector]
) t ON table.[Sector] = t.[Sector] and table.rec_cnt = t.max_rec

使用简单的窗口函数可以做到以下几点:

select distinct [Sector], 
FIRST_VALUE(Category) over (partition by Sector order by rec_cnt desc) as [Category], 
max(rec_cnt) over (partition by Sector) as [rec_cnt]
from table

编辑:好的,这不能工作,因为窗口函数是从SQLServer2005开始引入的。请参阅Radim的答案,这应该有效。

是时候更新到支持的软件了。SQL Server 2000多年来一直不受支持。您能否解释一下这个答案将如何解决问题,而不是只发布代码答案。
Select Sector, Category, Max(rec_cnt) as 'Max Recs'
From Table
Group By Sector, Category