You can use TOP WITH TIES
and RANK()
:
SELECT TOP (1) WITH TIES [JOB ROLE], [CITY], COUNT(DISTINCT [EMPLOYEE_ID]) as [COUNT]
FROM MyTable
GROUP BY [JOB ROLE], [CITY]
ORDER BY RANK() OVER (ORDER BY COUNT(DISTINCT [EMPLOYEE_ID]) DESC;
Or, use a subquery and RANK()
:
SELECT [JOB ROLE], [CITY], [COUNT]
FROM (SELECT [JOB ROLE], [CITY],
COUNT(DISTINCT [EMPLOYEE_ID]) as [COUNT],
RANK() OVER (ORDER BY COUNT(DISTINCT [EMPLOYEE_ID]) DESC) as seqnum
FROM MyTable
GROUP BY [JOB ROLE], [CITY]
) jc
WHERE seqnum = 1;
EDIT:
The question seems to have changed to be the most common job role per city. The above queries are easily modified:
SELECT TOP (1) WITH TIES [JOB ROLE], [CITY], COUNT(DISTINCT [EMPLOYEE_ID]) as [COUNT]
FROM MyTable
GROUP BY [JOB ROLE], [CITY]
ORDER BY RANK() OVER (PARTITION BY [JOB ROLE] ORDER BY COUNT(DISTINCT [EMPLOYEE_ID]) DESC;
Or, use a subquery and RANK()
:
SELECT [JOB ROLE], [CITY], [COUNT]
FROM (SELECT [JOB ROLE], [CITY],
COUNT(DISTINCT [EMPLOYEE_ID]) as [COUNT],
RANK() OVER (PARTITION BY [JOB ROLE], ORDER BY COUNT(DISTINCT [EMPLOYEE_ID]) DESC) as seqnum
FROM MyTable
GROUP BY [JOB ROLE], [CITY]
) jc
WHERE seqnum = 1;