计算sql中的匹配数

Bra*_*rad 0 sql

我想跟踪工作中不同部门做了多少次调查。通过使用“分组依据”并计算匹配的数量,这很容易做到。

SELECT     Departments.DepartmentName, count(*) as [survey count]
FROM         Departments INNER JOIN
                  Surveys ON Departments.DepartmentID =  Surveys.DepartmentID
 GROUP BY Departments.DepartmentName
Run Code Online (Sandbox Code Playgroud)

但这仅显示已完成调查的部门。如何让未完成调查的部门在结果列表中显示为零计数?

更新:

SELECT     Departments.DepartmentName AS Department, 
        COUNT( Surveys.DepartmentID) AS      [survey count]
        , Departments.DepartmentID
        FROM          Surveys FULL OUTER JOIN
                  Departments ON  Surveys.DepartmentID = Departments.DepartmentID
   GROUP BY Departments.DepartmentName, Departments.DepartmentID
Run Code Online (Sandbox Code Playgroud)

ara*_*nid 5

您需要一个“左外连接”而不是“内连接” - 这将在输出中生成行,其中与“调查”对应的所有列都为空,其中连接条件不匹配。

您需要将查询更新为“count(Surveys.DepartmentID)”或“sum(case when Surveys.departmentID is not null then 1 else 0 end)”以避免将此类行计为单个提交。