2016-11-06 155 views
1

我有一张表,我想要返回具有多个BSID的记录。SQL:以多个匹配返回记录

例子:

FirstName LastName CustomerID 
A   Apple  12345 
AB   Orange  12451 
AC   Durian  44123 
BODY  SHOP  11223 
BODY  SHOP  11224 
BODY  SHOP  11225 

问:

我怎么只返回底部的三个地方这个特定的个体有三种不同的客户ID?

我试图写

select Firstname, lastname, BSID, count(*) 
from table Profile 
group by firstname, lastname, BSID 
having count(*) > 1 

但结果返回所有的6行。

+0

到目前为止你做了什么? (在你自己的) –

+0

什么是BSID? –

回答

0

一种选择是使用您已写入的子查询来标识要保留的名/姓对,然后将其加回到主表中。

SELECT t1.* 
FROM Profile t1 
INNER JOIN 
(
    SELECT FirstName, Lastname, BSID 
    FROM Profile 
    GROUP BY FirstName, Lastname, BSID 
    HAVING COUNT(*) > 1 
) t2 
    ON t1.Firstname = t2.Firstname AND 
     t1.Lastname = t2.Lastname AND 
     t1.BSID = t2.BSID 
0

在亚马逊红移,如果包括BISGROUP BY子句,那么它将返回所有的值。由于与BIS分组,因此没有重复的记录。下面是结果集,您将收到,

FirstName LastName CustomerID Count 
A   Apple  12345  1  
AB   Orange  12451  1 
AC   Durian  44123  1 
BODY  SHOP  11223  1 
BODY  SHOP  11224  1 
BODY  SHOP  11225  1 

,你在having子句的个数确认条件(*)> 1,因此,所有的行会满足这个条件。

但你需要的结果会像下面,

FirstName LastName Count 
A   Apple  1  
AB   Orange  1 
AC   Durian  1 
BODY  SHOP  3 

因此,你有如下修改您的查询,

select Firstname, lastname, count(*) 
from table Profile 
group by firstname, lastname 
having count(*) > 1 

刚刚从 “选择” 和“组中删除BIS通过“条款。

希望这应该能解决您的问题。