SQL根据特定记录查找重复项
编辑:这是MS SQL Server 2008 我只想找到特定记录的副本, 在下面的示例中,我希望根据状态为1的记录查找重复项 下面是示例数据集SQL根据特定记录查找重复项,sql,sql-server,sql-server-2008,duplicates,Sql,Sql Server,Sql Server 2008,Duplicates,编辑:这是MS SQL Server 2008 我只想找到特定记录的副本, 在下面的示例中,我希望根据状态为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 我想要的是这个 Na
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
但那不是我需要的。你很接近了。您希望将
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;
你不也想要CBA吗?@GordonLinoff不CBA是不重复的,但我不需要在select子句中包含状态才能对它们求和吗?感谢@bluefeet,你可以在这里看到它的作用()。您不需要在
select
语句中设置status
。