在T-SQL中检查一个子查询以包含另一个子查询的结果

在T-SQL中检查一个子查询以包含另一个子查询的结果,sql,sql-server,tsql,group-by,window-functions,Sql,Sql Server,Tsql,Group By,Window Functions,我正在尝试编写一个查询,该查询应使用以下条件执行join(或where子句): 左表的子查询应包含右表的子查询结果(结果也应分组) 具体标准如下: 选择以下客户: 对于[ClientSegment]的问题Id中的每个问题.Id 应至少为[ClientSegmentAnswers]中的ClientAnswers.AnswerId中的一个(在LINQ中的任何一个上等效) 如何在单个查询中不使用for循环(游标)来实现这一点 UPD 添加了用于创建表和数据的脚本 预期结果 选择Bob作为id为1的

我正在尝试编写一个查询,该查询应使用以下条件执行
join
(或
where
子句):

左表的子查询应包含右表的子查询结果(结果也应分组)

具体标准如下:

选择以下客户:

对于[ClientSegment]的问题Id中的每个问题.Id

应至少为[ClientSegmentAnswers]中的ClientAnswers.AnswerId中的一个(在LINQ中的任何一个上等效)

如何在单个查询中不使用for循环(游标)来实现这一点

UPD

添加了用于创建表和数据的脚本

预期结果


选择Bob作为id为1的ClientSegment的唯一匹配消费者的查询

SQL联接将有助于在单个查询中实现这一点

例如:

select 
c.name,
c.id,
...
from Question as que 
left join ClientSegment as cs on que.id=cs.id
left join ClientSegmentAnswers as csans on  csans.ClientSegmentID=cs.id
left join Answer as ans on ans.id=csans.answerid
left join ClientAnswer as ca on ca.answerid=ans.answerid
left join Client as c on c.id=ca.ClientID
where ca.ClientID is not null 

此查询将只返回至少回答一个问题的clientname。您也可以根据需要修改查询

我编辑了问题,添加了样本数据。您建议的查询没有返回预期的结果,不幸的是,您的意思是只选择段类型1客户端?使用您的结构很难实现,因为一些答案id同时适用于两种细分类型,例如:AnswerID-4。但您可以使用左连接查询省略类型“2”。不,答案有外键,所以答案只属于一个问题