SQL Server - 选择不同的查询

时间:2016-09-13 16:32:00

标签: sql sql-server select sql-server-2012

我有一个tblA,我有几千个客户。我正在尝试编写一个查询,向我显示具有多个特定类型记录的客户端。这就是我的表格。

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

4 个答案:

答案 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 :(得分: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)

答案 2 :(得分: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

答案 3 :(得分:1)

我认为你需要这样的东西

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