SQL 计算关系不存在的地方

SQL Count where relationship Doesn't Exist

我有 3 个表,其中一个包含事件列表,另一个包含用户列表,最后一个包含事件和用户之间的关系。可能有多个不同类型的用户与事件相关(受影响的用户或分配给用户,每个用户都有自己的关系class)我试图生成一个查询,该查询将显示分配给每个用户的事件数量以及没有分配给用户的事件。我有以下获取用户列表的查询:

SELECT MTV_System$Domain$User.DisplayName as Analyst, COUNT(MTV_System$WorkItem$Incident.Id_9A505725_E2F2_447F_271B_9B9F4F0D190C) AS Incidents
FROM RelationshipView
INNER JOIN MTV_System$Domain$User ON RelationshipView.TargetEntityId=MTV_System$Domain$User.BaseManagedEntityId
INNER JOIN MTV_System$WorkItem$Incident ON RelationshipView.SourceEntityId=MTV_System$WorkItem$Incident.BaseManagedEntityId
WHERE RelationshipView.RelationshipTypeId='15E577A3-6BF9-6713-4EAC-BA5A5B7C4722'  AND RelationshipView.IsDeleted='0' AND  MTV_System$WorkItem$Incident.Status_785407A9_729D_3A74_A383_575DB0CD50ED = '5E2D3932-CA6D-1515-7310-6F58584DF73E'

GROUP BY MTV_System$Domain$User.DisplayName

但是这不允许我查看有多少事件没有用户。我创建了这个查询,它从具有关系的数字中减去事件的数量

Select (Select COUNT(MTV_System$WorkItem$Incident.Id_9A505725_E2F2_447F_271B_9B9F4F0D190C) FROM MTV_System$WorkItem$Incident
WHERE MTV_System$WorkItem$Incident.Status_785407A9_729D_3A74_A383_575DB0CD50ED = '5E2D3932-CA6D-1515-7310-6F58584DF73E') -
(SELECT COUNT(MTV_System$WorkItem$Incident.Id_9A505725_E2F2_447F_271B_9B9F4F0D190C)
FROM RelationshipView
INNER JOIN MTV_System$WorkItem$Incident ON RelationshipView.SourceEntityId=MTV_System$WorkItem$Incident.BaseManagedEntityId
WHERE RelationshipView.RelationshipTypeId='15E577A3-6BF9-6713-4EAC-BA5A5B7C4722'  AND RelationshipView.IsDeleted='0' AND  MTV_System$WorkItem$Incident.Status_785407A9_729D_3A74_A383_575DB0CD50ED = '5E2D3932-CA6D-1515-7310-6F58584DF73E'
) AS 'Incidents'

然而,这显示为单独的查询,而不是先前结果中的 'Unassigned' 值。

我如何组合这 2 个查询以获得如下所示的结果:

Analyst    | No Incidents
Bob        |     5
Dave       |     4
Unassigned |     6

谢谢

你想要left join得到不匹配的东西。为此,您要从 Incident table 开始,因为它包含您想要保留的所有内容。最大的微妙之处在于将条件从 where 子句移动到 on 子句:

SELECT u.DisplayName as Analyst, 
       COUNT(r.SourceEntityId) AS Incidents
FROM MTV_System$WorkItem$Incident i LEFT JOIN
     RelationshipView r
     ON r.SourceEntityId = i.BaseManagedEntityId AND
        r.RelationshipTypeId = '15E577A3-6BF9-6713-4EAC-BA5A5B7C4722'  AND
        r.IsDeleted ='0'LEFT JOIN
     MTV_System$Domain$User u
     ON r.TargetEntityId = u.BaseManagedEntityId         
WHERE i.Status_785407A9_729D_3A74_A383_575DB0CD50ED = '5E2D3932-CA6D-1515-7310-6F58584DF73E'
GROUP BY u.DisplayName

注意我还添加了 table 别名。这些使查询更易于编写和阅读。

编辑:

我想你想要:

SELECT COALESCE(u.DisplayName, 'Not Assigned') as Analyst, 
       COUNT(r.SourceEntityId) AS Incidents
. . .