2016-09-13 109 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