我有一些看起来像这样的数据:
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上,这可能会使它比它应该更复杂。
答案 0 :(得分:2)
我相信即使在SQL Server 2000上也可以使用嵌套的GROUP BY
。
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
答案 1 :(得分:0)
使用简单的窗口函数应该可以做到:
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
编辑:好的,这不起作用,因为窗口函数仅从SQL Server 2005开始引入。请参阅Radim的答案,这应该有效。
答案 2 :(得分:0)
Select Sector, Category, Max(rec_cnt) as 'Max Recs'
From Table
Group By Sector, Category