我想跟踪工作中不同部门做了多少次调查。通过使用“分组依据”并计算匹配的数量,这很容易做到。
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)
您需要一个“左外连接”而不是“内连接” - 这将在输出中生成行,其中与“调查”对应的所有列都为空,其中连接条件不匹配。
您需要将查询更新为“count(Surveys.DepartmentID)”或“sum(case when Surveys.departmentID is not null then 1 else 0 end)”以避免将此类行计为单个提交。
| 归档时间: |
|
| 查看次数: |
10334 次 |
| 最近记录: |