Need to return only x # of rows per distinct entries in another table

I need to get a result set showing COUNSELOR_RESPONSI.COUNSELOR_TITLE and the top three COUNT(CANDIDATE.CUR_PROG) per each COUNSELOR_TITLE.  I've been able to build the total result set, just not the top 3 by COUNSELOR_TITLE.

Desired result would be like:
Name          Program     Count
counselor1    cur_prog1   3
counselor1    cur_prog2       2
counselor1    cur_prog3       1
counselor2    cur_prog1   10
counselor2    cur_prog2   8
counselor2    cur_prog3   4


Hopefully that makes sense to someone.
SELECT     COUNT(CANDIDATE.CUR_PROG) AS Count, CANDIDATE.CUR_PROG, COUNSELOR_RESPONSI.COUNSELOR_TITLE
FROM         CANDIDATE INNER JOIN
                      NAME_MASTER ON CANDIDATE.HIGH_SCHOOL = NAME_MASTER.ID_NUM INNER JOIN
                      AD_ORGANIZ_MST_EXT ON NAME_MASTER.ID_NUM = AD_ORGANIZ_MST_EXT.ID_NUM INNER JOIN
                      COUNSELOR_RESPONSI ON AD_ORGANIZ_MST_EXT.COUNSELOR_RESP_INI = COUNSELOR_RESPONSI.COUNSELOR_INITIALS
WHERE     (CANDIDATE.CUR_YR = '2008') AND (CANDIDATE.CUR_STAGE = '32')
GROUP BY CANDIDATE.CUR_PROG, CANDIDATE.CUR_YR, COUNSELOR_RESPONSI.COUNSELOR_TITLE
ORDER BY COUNSELOR_RESPONSI.COUNSELOR_TITLE, Count DESC

Open in new window

RankenISAsked:
Who is Participating?
 
Raja Jegan RConnect With a Mentor SQL Server DBA & ArchitectCommented:
This should help you out:
SELECT COUNSELOR_TITLE,CUR_PROG, [Count]
FROM (
SELECT COUNSELOR_TITLE,CUR_PROG, [Count], ROW_NUMBER() OVER ( PARTITION BY COUNSELOR_TITLE ORDER BY [Count] DESC) AS RNUM
FROM (
SELECT COUNSELOR_RESPONSI.COUNSELOR_TITLE, COUNT(CANDIDATE.CUR_PROG) AS [Count], CANDIDATE.CUR_PROG
FROM         CANDIDATE INNER JOIN
                      NAME_MASTER ON CANDIDATE.HIGH_SCHOOL = NAME_MASTER.ID_NUM INNER JOIN
                      AD_ORGANIZ_MST_EXT ON NAME_MASTER.ID_NUM = AD_ORGANIZ_MST_EXT.ID_NUM INNER JOIN
                      COUNSELOR_RESPONSI ON AD_ORGANIZ_MST_EXT.COUNSELOR_RESP_INI = COUNSELOR_RESPONSI.COUNSELOR_INITIALS
WHERE     (CANDIDATE.CUR_YR = '2008') AND (CANDIDATE.CUR_STAGE = '32')
GROUP BY CANDIDATE.CUR_PROG, CANDIDATE.CUR_YR, COUNSELOR_RESPONSI.COUNSELOR_TITLE
) AS TEMP ) AS TEMP1
WHERE RNUM <= 3

Open in new window

0
 
RankenISAuthor Commented:
Thank you for your quick, accurate response!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.