我使用的是SQL Server 2012,需要一些帮助才能在查询中获得所需的结果。我的数据如下:
ConsumerID Tag
1000028041 bBROAapp
1000028041 bBROtiva
1000028041 bClsElig
1000028041 bPCAFwd
1000028041 bTOPNoRs
1000028041 bTOPNwRq
1000028041 bTOPActv
我希望只有当他们拥有我正在寻找的所有标记值时才选择给定的ConsumerID。
例如,这将选择包含3个标记中的任何一个的所有记录:
SELECT ConsumerID
FROM BorrowerTags
WHERE Tag IN('bBROAapp', 'bBROtiva');
结果:
1000028041 bBROAapp
1000028041 bBROtiva
这不会返回任何结果
SELECT ConsumerID
FROM BorrowerTags
WHERE Tag = 'bBROAapp'
AND Tag = 'bBROtiva';
没有结果
我只想要那些ConsumerID具有两个值的记录 - 而不是任何一个。
答案 0 :(得分:3)
我想只在具有所有标记值
的情况下选择给定的ConsumerID
您可以使用:
SELECT ConsumerID
FROM BorrowerTags
WHERE Tag IN ('bBROAapp', 'bBROtiva')
GROUP BY ConsumerID
HAVING COUNT(DISTINCT Tag) = 2;
的 LiveDemo
强>
如果您想要消费者的完整记录,您可以使用:
SELECT *
FROM BorrowerTags
WHERE ConsumerID IN (... above query ...)
答案 1 :(得分:0)
您可以使用INTERSECT
来获得预期结果:
SELECT DISTINCT ConsumerID FROM BorrowerTags WHERE Tag = 'bBROAapp'
INTERSECT
SELECT DISTINCT ConsumerID FROM BorrowerTags WHERE Tag = 'bBROtiva'
结果:
1000028041