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