【发布时间】:2016-07-23 23:26:59
【问题描述】:
我有以下查询完全符合我的预期。它返回所有带有计数的状态。
SELECT
ProcessStatuses.Status,
COUNT(SecretProcesses.ProcessStatusID) AS Count
FROM
ProcessStatuses
LEFT OUTER JOIN
SecretProcesses ON ProcessStatuses.ProcessStatusID = SecretProcesses.ProcessStatusID
GROUP BY
ProcessStatuses.Status
结果:
Status Count
-------------
status1 0
status2 0
status3 0
status4 0
status5 0
status6 1
status7 0
status8 0
但是,如果我在查询中添加 WHERE 子句,它只会返回具有计数的状态。
例如
SELECT
ProcessStatuses.Status,
COUNT(SecretProcesses.ProcessStatusID) AS Count
FROM
ProcessStatuses
LEFT OUTER JOIN
SecretProcesses ON ProcessStatuses.ProcessStatusID = SecretProcesses.ProcessStatusID
WHERE
AreaID IN (21, 22, 23)
GROUP BY
ProcessStatuses.Status
结果:
Status Count
---------------
status6 1
这种方式违背了进行左外连接的目的,因为我希望能够按它们所在的区域过滤结果,同时仍然显示所有可能的状态。 where 子句只返回有值的状态,而不是所有值。
【问题讨论】:
-
如果使用 Count(1) 或代替 Count(SecretProcesses.ProcessStatusId) 会发生什么。
标签: sql sql-server