2014-01-14 29 views
0

編輯:這是MS SQL Server 2008的SQL查找重複針對特定記錄

,我想找到只針對特定的記錄重複的,例如,在 下面我想找到針對有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 

但是,這不是我所需要的。

+0

難道你不想CBA嗎? –

+0

@ GordonLinoff沒有CBA不重複 – skmasq

回答

1

你就近了。你想改變having where子句中的地位是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; 
+0

但是我不需要在select子句中包含Status來能夠將它們加起來嗎? – skmasq

+0

感謝@bluefeet,你可以在這裏看到它的工作(http://sqlfiddle.com/#!2/2a953/6)。您不需要在'select'語句'中擁有'status'。 –

+0

好吧,謝謝你在這裏工作的例子http://sqlfiddle.com/#!3/f2cbe/1 – skmasq