繁体   English   中英

排除 SQL 中的特定匹配

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM