2016-09-13 142 views
0

我有一個tblA,我有幾千個客戶端。我試圖編寫一個查詢,告訴我有多個特定類型的記錄的客戶端。這就是我的桌子的樣子。SQL Server - 選擇不同的查詢

ClientID   TypeB 
123    1 
145    1 
123    2 
199    1 
199    2 
145    2 
123    1 

因此,您可以在這裏看到(這不是一個完整的表格,但這只是相關的)。每個客戶端應該只有一個TypeB = 1和TypeB = 2的記錄。然而,某些客戶端(123)對於TypeB = 1有多條記錄。我試圖找到所有有多個Type = 1記錄的客戶端。

期望的最終結果:

ClientID   TypeB 
123    1 
123    1 

這是我一直在努力做

select distinct(clientid), TypeB 
from tblA 
where TypeB=1 
having count(TypeB)>1 
group by clientid 
+1

我知道你已經接受一個答案,但我會注意到你真的只需要在查詢中反轉'having'和'group by'。 TypeB上的分組不是解決方案的必要組成部分。 – shawnt00

+0

@ shawnt00 - 我注意到它足夠接近。但有時我試圖建立一個查詢,我不斷得到錯誤在sql服務器這只是煩人,但我很接近。謝謝! – BobSki

回答

1

我想你需要的東西像這樣

SELECT COUNT(ClientID), ClientID, TypeB 
FROM tblA 
WHERE TypeB = 1 
GROUP BY ClientID, TypeB 
HAVING COUNT(ClientID) > 1 
+0

謝謝,這是工作。 – BobSki

+0

非常歡迎。 –

1

嘗試使用

SELECT a.clientid, 
     a.typeb 
FROM tblA a 
WHERE (SELECT Count(*) 
     FROM tblA b 
     WHERE b.clientid = a.clientid 
       AND b.typeb = 1) > 1 
1

看看它是否在SQL Server中:

select * 
from client 
qualify sum()over(partition by clientId, typeB)>1 

其他簡單的方法是

select * 
from client 
where clientId in 
(select clientId 
from client 
having count(*)>1) 
1

你可以試試這個

;with cte as (
select clientid, typeb, row_number() over(partition by clientid, typeb order by clientid) as rn 
from yourtable) select clientid, typeb from cte where rn > 1