2012-02-02 3 views
1
SELECT a.ClassName, b.TeacherName, COUNT(c.Class_ID) 
from dbo.Class a 
inner join dbo.Teacher b on a.Teacher_ID = b.Teacher_ID 
left outer join dbo.ClassRegistration c on a.Class_ID = c.Class_ID 
group by a.ClassName, b.TeacherName 

현재 위의 SQL 스크립트가 있습니다. 괜찮아요, 아이디어는 ClassName, TeacherName 및 ClassRegistration 테이블에 나타나는이 클래스의 횟수를 표시하는 것입니다. 이제 다음 부분은 내가 조금 붙어있는 부분입니다. ClassRegistration 테이블에는 'HasPaid'라는 열이 있습니다. 얼마나 많은 "ClassRegistration 's"가 지불되었는지를 나타내는 2nd Count 열을 추가해야합니다. HasPaid 유형 BIT의 경우는 같은 방법으로 두 번째 카운트를 단순화 할 수있다,기본 SQL - 두 번째 Count() 열이 필요합니다.

SELECT 
    a.ClassName, 
    b.TeacherName, 
    COUNT(c.Class_ID), 
    COUNT(CASE c.HasPaid WHEN 1 THEN c.Class_ID ELSE NULL END) 
from dbo.Class a 
inner join dbo.Teacher b 
    on a.Teacher_ID = b.Teacher_ID 
left outer join dbo.ClassRegistration c 
    on a.Class_ID = c.Class_ID 
group by a.ClassName, b.TeacherName 

을 :

답변

1

이 시도는 SQL 서버의 사용에 있다면

SUM(CAST(HasPaid AS INT)) 
+0

완료! 매력처럼 작동합니다! – SkonJeet

+1

답변이 업데이트되었습니다. –

+1

Ahhh brilliant! 이미 귀하의 게시물에서 많은 것을 배웠습니다. 감사합니다 다시 올렉! – SkonJeet

1

을하고 HasPaid 열 경우 유형 비트입니다. 이와 비슷한 것을 시도해보십시오.

SELECT a.ClassName, b.TeacherName, COUNT(c.Class_ID), SUM(CASE HasPaid WHEN 1 THEN 1 ELSE 0 END) 
from dbo.Class a 
inner join dbo.Teacher b on a.Teacher_ID = b.Teacher_ID 
left outer join dbo.ClassRegistration c on a.Class_ID = c.Class_ID 
group by a.ClassName, b.TeacherName 
+0

감사합니다. Max, Oleg와 똑같은 원리! – SkonJeet

관련 문제