2013-04-02 2 views
1

를 사용하는 경우 0을 갖는 나는 그들의 직업은 다음과 같은 목록에있는 사람들의 목록을 가지고 직업으로 내가 그룹을, 내가 어떤 직업에 0을 반환에 액세스하려는SQL 카운트

Doctor Male 
Teacher Male 
Principal Male 
Nurse Female 
Doctor Male 

내가 갖고있는 하위 목록에는 없습니다. 이 2 명의 남성이 있기 때문에 의사 2를 얻을 수 있지만 남성 간호사가 없기 때문에 또한 간호사에 0을 산출하기 위해 내가 좋아하는 것

SELECT Profession.Profession, Count(Profession.Profession) AS CountOfProfession 
FROM People INNER JOIN Profession ON People.PeopleID = Profession.PeopleID 
WHERE (((People.Sex)="Male")) 
GROUP BY Profession.Profession; 

: 여기에 내가 사용하고있는 코드입니다. 제가 어떻게이 일을 할 수 있는지 알려주세요, 고마워요!

답변

0

외부 조인이 필요합니다. 그것은 그래서 나는 테이블의 순서를 스위치드 left join :

SELECT Profession.Profession, 
     sum(iif(people.sex = "Male", 1, 0)) AS CountOfProfession 
FROM Profession LEFT JOIN 
    ON People.PeopleID = Profession.PeopleID 
GROUP BY Profession.Profession; 
+1

은'where' 이 절은 내부 조인으로 바뀝니다. – Andomar

+0

'WHERE (((People.Sex) = "Male"))'조건을 생략해야한다고 생각합니다. – shahkalpesh

+0

나는 아직도 얼마나 많은 남성이 있는지 알고 싶다. 이것을 LEFT JOIN (왼쪽 조인)으로 변경해도 나는 여성 만 성관계를 갖는 직업이 여전히 부족하기 때문에이를 수정하지 않았습니다. – user2237422

0

이가 외부로 수행 할 수 있습니다 가입하고 ON 절에 WHERE에서 상태를 이동 :

SELECT Profession.Profession, 
     COUNT(People.PeopleID) AS CountOfProfession 
FROM Profession 
    LEFT JOIN People 
    ON ( People.PeopleID = Profession.PeopleID 
     AND People.Sex = 'Male') 
GROUP BY Profession.Profession ;