SQL-使用计数时具有0

SQL-使用计数时具有0,sql,join,count,Sql,Join,Count,我有一份职业清单,如下所示: Doctor Male Teacher Male Principal Male Nurse Female Doctor Male 当我按专业对他们进行分组时,我希望Access为不在我的子列表中的任何专业返回0。以下是我正在使用的代码: SELECT Profession.Profession, Count(Profession.Profession) AS CountOfProfession FROM People INNER JOIN Profession

我有一份职业清单,如下所示:

Doctor Male
Teacher  Male
Principal Male
Nurse Female
Doctor Male
当我按专业对他们进行分组时,我希望Access为不在我的子列表中的任何专业返回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;

我希望它为医生产生2,因为有2名男性,但也为护士产生0,因为没有男性护士。请让我知道我怎么做,谢谢

您需要一个外部联接。我切换了表的顺序,因此它是一个
左连接

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;

这可以通过外部联接完成,并将条件从
WHERE
移动到
ON
子句:

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 ;

where
子句将其转换为一个内部联接。我想应该忽略条件
where(((People.Sex)=“Male”)
。不过我还是想知道有多少男性。将此更改为“左连接”并不能解决此问题,因为我仍然缺少只有女性作为性别的职业。@Gordon Linoff似乎可以按男性进行计数,然后将结果与职业列表连接(保留左连接)我修复了查询。很抱歉,大脑今天一定不能正常工作。我确实知道左连接是如何工作的。