2013-09-05 3 views
1

SQL 중랑이의 경우 다음과 같습니다.그룹화 된 이중 내부 조인

두 개의 테이블 : 학생 이름과 학생 등록이 있습니다. 한 학생은 1 년에 1 ~ 2 회, 8 ~ 10 회에 걸쳐 등록합니다. 나는 현재 내가 다음과 같이 수행 시스템 (2013 년 즉, 모든 학생), 모든 학생들을 끌어하려는 : 이것은 나에게 올해에 등록 된 횟수로 결과를 제공

SELECT studentkey, lastname, firstname, COUNT(year) AS registrations 
    FROM uctProgrammesRegistered 
    LEFT JOIN uctStudents 
    ON uctStudents.studentnumber=uctProgrammesRegistered.studentkey 
    WHERE programmeregistered='".$programmeCode."' AND year='".$year."' 
    GROUP BY studentkey, lastname, firstname 
    ORDER BY studentkey, lastname 

. 그러나, 제가 정말로 원했던 것은 지난 수년간 등록 된 학생들의 등록 횟수입니다. 이것이 단지 학교에 등록 된 모든 학생들에게 저에게 줄 것 인 이후에 년 = $ 년의 부분을 풀어서 해결할 수는 없다는 것을 유의하십시오. 나는 지금 등록 된 학생들로부터이 그룹의 학생들이 등록 된 횟수를 알고 싶습니다.

여러 번 JOIN 문을 사용하면 동일한 테이블 uctProgrammesRegistered에 다른 조인을 포함 할 수 있다고 생각했지만 (어떻게 든 programmeregistered = ' ". $ programmeCode."'와 일년 내내 체크를 남겨 두는 것만으로) .하지만 SQL은이 아이디어에 협조하지 않는 것

답변

1

을이 시도 :

Select studentkey, lastname, firstname, 
    Count(*) registrations 
From uctStudents s 
    Join uctProgrammesRegistered r 
     on r.studentkey = s.studentnumber 
Where Exists(Select * from uctProgrammesRegistered 
      Where studentkey = s.studentnumber 
       And year='".$year."') 
Group By studentkey, lastname, firstname 
Order By studentkey, lastname 

또는 ...

Select studentkey, lastname, firstname, 
    Sum(Case when year = 2013 then 1 else 0 end) Registrations2013, 
    Count(*) TotalRegistrations 
From uctStudents s 
    Join uctProgrammesRegistered r 
     on r.studentkey = s.studentnumber 
Where Exists(Select * from uctProgrammesRegistered 
      Where studentkey = s.studentnumber 
       And year='".$year."') 
Group By studentkey, lastname, firstname 
Order By studentkey, lastname 
+0

완벽한을 많은 감사를! –