Using Sql Server 2005+, you can do this using ROW_NUMBER ()
Take a look at this complete example.
DECLARE @sales TABLE( region VARCHAR(50), person VARCHAR(50), Sales FLOAT ) INSERT INTO @sales SELECT 'canada','mike smith',1 INSERT INTO @sales SELECT 'canada','mike smith',1 INSERT INTO @sales SELECT 'canada','mike smith',1 INSERT INTO @sales SELECT 'canada','mike smith',1 INSERT INTO @sales SELECT 'canada','joe blog',1 INSERT INTO @sales SELECT 'canada','joe blog',1 INSERT INTO @sales SELECT 'canada','pete dodd',1 INSERT INTO @sales SELECT 'usa','john doe',1 INSERT INTO @sales SELECT 'usa','john doe',1 INSERT INTO @sales SELECT 'usa','jane smyth',1 INSERT INTO @sales SELECT 'europe','pieter tsu',1 INSERT INTO @sales SELECT 'europe','pieter tsu',1 INSERT INTO @sales SELECT 'europe','mike lee',1 ;WITH Counts AS( SELECT region, person, count(*) as thousands FROM @sales GROUP BY region, person ), CountVals AS( SELECT *, ROW_NUMBER() OVER(PARTITION BY region ORDER BY thousands DESC) ROWID FROM Counts ) SELECT * FROM CountVals WHERE ROWID = 1
source share