数据库记录包含所有值

时间:2016-07-13 17:46:06

标签: sql tsql sql-server-2012

我使用的是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具有两个值的记录 - 而不是任何一个。

2 个答案:

答案 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