【发布时间】:2020-08-17 15:04:39
【问题描述】:
此查询的目标是选择我们数据库中的每个工作订单模板,并对状态未关闭的每个现有工作订单进行计数。我正在使用左连接。左表是工单模板表。右表是工作订单表,其中包含我们数据库中的每个工作订单。
SELECT A.DESCRIPTION AS WO_TEMPLATE, COUNT(B.WORKORDERID) AS NUM_OF_WOS
FROM WOTEMPLATE AS A
LEFT JOIN WORKORDER AS B
ON A.WOTEMPLATEID = B.WOTEMPLATEID
WHERE B.STATUS != 'CLOSED'
GROUP BY A.DESCRIPTION
ORDER BY WO_TEMPLATE;
我们的数据库有 386 个工单模板...因此应返回 386 行。我的问题是当我包含 WHERE 子句时,只返回 286 行,因为没有返回没有关联工作单的工作单模板。
给定 JOIN、GROUP BY 和 WHERE 子句,我如何返回 count = 0 的行?
使用 Microsoft SQL Server Express
【问题讨论】:
-
我只是想补充您的格式。非常舒缓。做得好。看来你上过我的课了。
-
跳过 WHERE 子句。使用 case 表达式进行条件聚合。
-
我认为唯一的问题是
WHERE子句将此连接变为内部连接,因为在外部连接行中 B.STATUS 为空。将WHERE更改为AND。应该是这样的。 -
@ThorstenKettner 这是可视化 WHERE 子句的作用的好方法。我可能会偷那个。
标签: sql sql-server