[英]Exclude a specific match in SQL
早上好,我对 SQL 世界还很陌生,并且遇到了一个问题。 我一直在搜索论坛,但没有真正找到答案。 我有 2 个表Incidents ,其中包含 IT Incident 和Employee的所有信息,其中包含所有 Employee 信息。 Incident 表有解决事件的人的姓名,但没有他们工作的团队。我创建了一个联接,因为两个表都有 UserID,我试图从 Employee 表中恢复 Team,但是有几个的员工有 2 个条目,一个是正确的团队,另一个是“自助服务”。 我的问题是,有没有办法总是忽略“自助服务”的任何匹配,而只使用另一条记录? 非常感谢任何帮助谢谢
抱歉,我正在使用 SSMS v14 到目前为止我的代码是
SELECT
i.CreatedBy,
COALESCE (e.Team, e1.Team) as CreatedByTeam,
i.CreatedDateTime,
i.Owner,
i.OwnerTeam,
i.LastModDateTime,
i.ResolvedBy,
COALESCE (e2.Team, e3.Team) as ResolvedByTeam
FROM
Incident i
LEFT JOIN Employee e ON i.CreatedBy=e.DisplayName
LEFT JOIN Employee e1 ON i.CreatedBy=e1.PrimaryEmail
LEFT JOIN Employee e2 ON i.ResolvedBy=e2.DisplayName
LEFT JOIN Employee e3 ON i.ResolvedBy=e3.PrimaryEmail
WHERE
i.CreatedDateTime BETWEEN '2021-06-09' AND '2022-06-09' OR i.LastModDateTime BETWEEN '2021-06-09' AND '2022-06-09'
返回自助服务结果的是 2 个 COALESCE
您可以使用WHERE
语句过滤出自助服务记录,最好只使用 cte 执行一次:
WITH pure_employee AS (
SELECT * FROM Employee WHERE Team <> 'Self Service'
)
SELECT
i.CreatedBy,
COALESCE (e.Team, e1.Team) as CreatedByTeam,
i.CreatedDateTime,
i.Owner,
i.OwnerTeam,
i.LastModDateTime,
i.ResolvedBy,
COALESCE (e2.Team, e3.Team) as ResolvedByTeam
FROM
Incident i
LEFT JOIN pure_employee e ON i.CreatedBy=e.DisplayName
LEFT JOIN pure_employee e1 ON i.CreatedBy=e1.PrimaryEmail
LEFT JOIN pure_employee e2 ON i.ResolvedBy=e2.DisplayName
LEFT JOIN pure_employee e3 ON i.ResolvedBy=e3.PrimaryEmail
WHERE
i.CreatedDateTime BETWEEN '2021-06-09' AND '2022-06-09' OR i.LastModDateTime BETWEEN '2021-06-09' AND '2022-06-09'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.