2016-11-06 191 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通過「條款。

希望這應該能解決您的問題。