2012-03-11 3 views
0

안녕하십니까.Transact SQL 각 그룹의 최대 등록 찾기

나는 테이블 구조를 내가 CourseID, StudentName, 코스 당 최대 등록을 나열하고 싶은

CourseID StudentName TermPaperID

101   Jon   1 
101   Jon   2 
101   Jon   3 
101   David   1 
101   David   2 
102   David   5 
102   David   6 
102   George   5 

(I는 SQL Server 2000을 사용하고) 있습니다.

나는 다음과 같은 쿼리

select 
CourseId, 
StudentName, 
max(x.numberofregistration) as max_registration 
from 
(
    select 
      CourseID, 
      StudentName, 
      count(CourseID) as numberofregistration 
    from 
    dbo.Students 
      group by CourseId,StudentName 
)x 
group by CourseId,StudentName 

을 시도하지하지만 더 예상 결과를 제공했다.

예상되는 결과는

101   Jon   3 
102   David   2 

어떻게 예상 된 결과를 달성하기 위해 나는 테이블 구조

CourseID StudentName의 max_registration이 입니까? 미리 감사드립니다.

+0

SQL Server 2000? 너 한테 기분이 안좋아하지만 왜? –

+0

다른 행이있는 경우 : "102, George, 5"어떻게 결과에 영향을 줄 것으로 예상하십니까? – ninesided

답변

1

정말, 정말 못생긴 방법입니다. 나는 이것들을 너무 많이 쓰는 것보다는 업그레이드 요금을 모으기를 바란다고 생각한다. 바라건대 다른 누군가가 뭔가 깨끗하게 생겨나기를 바랍니다.

CREATE TABLE #x(CourseID INT, StudentName VARCHAR(32), TermPaperID INT); 

INSERT #x SELECT 101,'Jon ',1; 
INSERT #x SELECT 101,'Jon ',2; 
INSERT #x SELECT 101,'Jon ',3; 
INSERT #x SELECT 101,'David ',1; 
INSERT #x SELECT 101,'David ',2; 
INSERT #x SELECT 102,'David ',5; 
INSERT #x SELECT 102,'David ',6; 
INSERT #x SELECT 102,'George',5; 

SELECT b.CourseID, b.StudentName, max_registration = COUNT(*) 
FROM #x AS b 
INNER JOIN (
    SELECT CourseID, c = MAX(c) 
    FROM 
    (
    SELECT CourseID, StudentName, c = COUNT(CourseID) 
    FROM #x GROUP BY CourseID, StudentName 
) AS x GROUP BY CourseID 
) AS s 
ON b.CourseID = s.CourseID 
GROUP BY b.CourseID, b.StudentName 
HAVING COUNT(*) = MAX(s.c) 
ORDER BY b.CourseID; 
+0

나를 안내하는 데 시간을 할애 해 주셔서 대단히 감사드립니다. row_number() 및 Partition을 사용하여 쉽게이 문제를 해결할 수 있다고 동의하지만 클라이언트 측 프로젝트에서 SQL Server 2000을 계속 사용하고 있습니다. – user1256813

0

CTE 'x'는 계산중인 것과 동일한 값으로 그룹화 된 것 같습니다. 단순히 다른 분야 (즉, 용어 용지 ID)를 세면 예상 된 결과를 제공해야합니다.

원하는 결과 샘플에서 그 결과가 샘플 데이터에서 예상되는 이유가 명확하지 않습니다. 질문에 대한 오해를 한 경우 다시 시도해 드리겠습니다. :-)

관련 문제