Sql 如何基于两列之间的匹配排除一行,其中一列具有多个值

Sql 如何基于两列之间的匹配排除一行,其中一列具有多个值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要根据两列值之间的匹配排除记录。一个列值对于每一行(指员工)是相同的,但另一个(销售团队)可以包含多个值 在下面的示例中,我不想返回引用ID存在于Sales Team列中的任何事务ID。换句话说,如果引用ID与任何销售团队值匹配,则不应返回任何内容 我试过显而易见的方法 where Sales Team <> Referring Associate 销售团队推荐员工的位置 但我最终返回了其他3条记录,其中条件为false 编辑: 样本数据: 预期输出: 说明: 根据销售

我需要根据两列值之间的匹配排除记录。一个列值对于每一行(指员工)是相同的,但另一个(销售团队)可以包含多个值

在下面的示例中,我不想返回引用ID存在于Sales Team列中的任何事务ID。换句话说,如果引用ID与任何销售团队值匹配,则不应返回任何内容

我试过显而易见的方法

where Sales Team <> Referring Associate
销售团队推荐员工的位置
但我最终返回了其他3条记录,其中条件为false

编辑:

样本数据:

预期输出:

说明:

根据销售团队和推荐员工之间的匹配情况,不应在查询结果中返回所有带有红色事务ID的行。

这是您想要的吗

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.transactionid = t.transactionid and
                        t2.salesteam = t.referringassociate
                 );
这是你想要的吗

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.transactionid = t.transactionid and
                        t2.salesteam = t.referringassociate
                 );
此查询:

select referring_associate from tablename 
where referring_associate = sales_team 
返回应排除的
引用的所有值

因此,请将其用于:

select * from tablename 
where 
  referring_associate not in (
    select referring_associate from tablename 
    where referring_associate = sales_team 
  )
返回所有其他行。

此查询:

select referring_associate from tablename 
where referring_associate = sales_team 
SELECT SalesTeams.*
FROM dbo.MyTest AS SalesTeams
LEFT JOIN dbo.MyTest ReferringAssociates ON SalesTeams.associateCode = ReferringAssociates.salesTeamCode
WHERE ReferringAssociates.salesTeamCode IS NULL
返回应排除的
引用的所有值

因此,请将其用于:

select * from tablename 
where 
  referring_associate not in (
    select referring_associate from tablename 
    where referring_associate = sales_team 
  )

返回所有其他行。

您的代码没有所谓的
引用ID
,因此我不理解这个问题。我建议您创建一个预期的输出表,然后简单解释一下,而不是写一长段您想要做的事情。我不能跟踪你的样本数据,也不希望你想实现一个逻辑。我已经更新了原始帖子以包含预期输出。提示:不使用图像的原因是。您的代码没有所谓的
引用ID
,因此我不理解这个问题。与其写一段很长的内容,我建议您创建一个预期输出表,然后简要解释。我不能跟踪你的样本数据,也不希望你想实现一个逻辑。我已经更新了原始帖子以包含预期输出。提示:不使用图像的原因如下。谢谢!这基本上就是最终起作用的逻辑。我基本上只是使用了“TransactionID”,而不是在中(返回我想要排除的记录的同一个查询)。谢谢!这基本上就是最终起作用的逻辑。我基本上只是使用了“TransactionID”而不是IN(返回我想要排除的记录的同一个查询)。
SELECT SalesTeams.*
FROM dbo.MyTest AS SalesTeams
LEFT JOIN dbo.MyTest ReferringAssociates ON SalesTeams.associateCode = ReferringAssociates.salesTeamCode
WHERE ReferringAssociates.salesTeamCode IS NULL