基于在其他相应列中保留多个值返回值的SQL查询
在下表中,我尝试运行一个查询,该查询返回一个GroupId,该GroupId具有多个相应的基于在其他相应列中保留多个值返回值的SQL查询,sql,sql-server,Sql,Sql Server,在下表中,我尝试运行一个查询,该查询返回一个GroupId,该GroupId具有多个相应的nodeid。例如,如果我有nodeIDs595644659,那么groupid2将被返回,而不是3,因为思想3对应于644和595但不是659。我不知道我需要做些什么加入吗? 我不太确定如何最好地表达标题,谢谢你的帮助 GroupSchema_Id GroupId ISchemeID NodeId 1 2 NULL 595 2
nodeid
。例如,如果我有nodeIDs
595644659,那么groupid2
将被返回,而不是3,因为思想3对应于644
和595
但不是659
。我不知道我需要做些什么加入吗?
我不太确定如何最好地表达标题,谢谢你的帮助
GroupSchema_Id GroupId ISchemeID NodeId
1 2 NULL 595
2 2 NULL 644
3 2 NULL 659
4 2 NULL 662
5 2 NULL 592
6 2 NULL 626
7 2 NULL 595
8 3 NULL 644
9 3 NULL 595
您不需要
加入
。您可以使用分组方式执行您想要的操作:
select groupId
from t
where nodeId in (595, 644, 659)
group by groupId
having count(distinct nodeId) = 3;
您不需要加入
。您可以使用分组方式执行您想要的操作:
select groupId
from t
where nodeId in (595, 644, 659)
group by groupId
having count(distinct nodeId) = 3;
取决于节点ID对于每个组是否唯一
SELECT GroupId
FROM YourTable
GROUP BY GroupID
HAVING SUM (CASE WHEN NodeID IN (595,644,659)
THEN 1
ELSE 0
END) = 3
取决于节点ID对于每个组是否唯一
SELECT GroupId
FROM YourTable
GROUP BY GroupID
HAVING SUM (CASE WHEN NodeID IN (595,644,659)
THEN 1
ELSE 0
END) = 3
由于节点似乎可以在一个组中出现两次(第2组中为595个),我怀疑您应该使用count(distinct nodeId)
而不仅仅是count(*)
@shawnt00您是对的,我更新了,首先快速检查了一下,没有看到任何重复项。@JuanCarlosOropeza。谢谢。由于节点可以在一个组中出现两次(第2组中为595个),我怀疑您应该使用count(distinct nodeId)
而不仅仅是count(*)
@shawnt00您是对的,我更新了,我首先快速检查了一下,没有看到任何重复项。@JuanCarlosOropeza。非常感谢。