Solved

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

Posted on 2009-04-06
2
181 Views
Last Modified: 2012-05-06
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

0
Comment
Question by:RankenIS
2 Comments
 
LVL 57

Accepted Solution

by:
Raja Jegan R earned 500 total points
ID: 24077705
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
 

Author Closing Comment

by:RankenIS
ID: 31567039
Thank you for your quick, accurate response!
0

Featured Post

Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Separate 2 comma delimited columns into separate rows 2 41
table joins in qry 17 65
SSRS - Date Report Options 2 29
SQL Recursion 6 20
A recent questions about how to add SSRS named instances, couldn't find any that talks about SQL server 2008, anyway I decided to help by creating some screen shots. The installation is straightforward, you just pop the SQL server 2008 installati…
Composite queries are used to retrieve the results from joining multiple queries after applying any filters. UNION, INTERSECT, MINUS, and UNION ALL are some of the operators used to get certain desired results.​
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question