2017-12-11 30 views
1

私はこのようになりますいくつかのデータがあります:私は何を取得したいことはカテゴリレコードの最大数に関連した、各セクターのために、テーブル見せているSQLエキス最大

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

対応ソフトウェアに更新する時期です。 SQL Server 2000は長年にわたってサポートされていません。 –

答えて

2

私は、ネストされたGROUP BYを使用してもOK 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 
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 

はEDIT:OK、これが動作することはできませんがウィンドウ関数はSQL Server 2005からしか導入されていないため、Radimからの回答を参照してください。