SQL查找特定记录的重复项

时间:2014-01-14 17:22:45

标签: sql sql-server sql-server-2008 duplicates

编辑:这是MS SQL Server 2008

我想找到仅针对特定记录的重复项, 在下面的示例中,我想查找具有Status = 1

的记录的重复项

以下是示例数据集

ID  |Name   |Status 
------------------------
1   |ABC    |1
2   |BAC    |1
3   |CBA    |1
4   |ABC    |2
5   |BAC    |5
6   |BAC    |7
7   |DAE    |8
8   |DAE    |2

我想要的是这个

Name    |Count  
-----------------
ABC     |2
BAC     |3

最初我想用这个

SELECT      Name,COUNT(*)
GROUP BY    Name
HAVING      COUNT(*) > 1

但结果将是

Name    |Count  
-----------------
ABC     |2
BAC     |3
DAE     |2

但这不是我需要的。

1 个答案:

答案 0 :(得分:1)

你很亲密。您希望将having子句更改为仅计算状态为1的值:

SELECT      Name, COUNT(*)
FROM table t
GROUP BY    Name
HAVING      sum(case when status = 1 then 1 else 0 end) > 0;

编辑:

如果您只想要计数大于1且状态为1的事物:

SELECT      Name, COUNT(*)
FROM table t
GROUP BY    Name
HAVING      sum(case when status = 1 then 1 else 0 end) > 0 and
            count(*) > 1;