2013-01-10 86 views
1

聲明:我仍在學習SQL,所以如果我的問題是作爲業餘愛好者出現的,或者是一個非常簡單的答案,我很抱歉。我沒有正式的訓練。我在教導自己。謝謝。定位重複

我正在尋找合適的查詢來查找表中的重複項。這是我目前有:

SELECT [名]

FROM [02Kids作爲TMP
GROUP BY [名]
HAVING COUNT(*)> 1

順序按名稱升序

這有效......排序。它確實會返回一個特定「名稱」出現多次的結果。它發生的次數是不相關的,雖然我也有查詢。

我遇到的問題是,這實際上是一個更大的更新查詢的一部分,雖然這也起作用,但我發現我的重複並非都是「真正」重複的。

更具體地講,這裏的一些數據的示例使用其中指定名稱的簡單選擇查詢拉:

http://i946.photobucket.com/albums/ad309/AGx-07_162/Capture_zps22107e1b.png

注意對於每組結果的CustNo列。雖然「名稱」在每組結果中都匹配,但CustNo與第一組不同。這些並不是真正的重複,因爲它們不屬於同一個客戶。

有什麼辦法可以進行某種比較,只返回CustNo相同的名稱嗎?

回答

3

您需要其他列包括到您的GROUP BY還有:

SELECT [Name],[CustNo], Count(*) AS [Count] 
FROM [02Kids] As Tmp 
GROUP BY [Name], [CustNo] 
HAVING Count(*)>1 
ORDER BY [Name] ASC, [CustNo] ASC, Count(*) DESC 
+0

非常感謝。這很好。 –

1
SELECT [Name], [LocNo] 

FROM [02Kids] As Tmp 
GROUP BY [LocNo] 
HAVING Count(*)>1 

order by Name asc 

或者,如果你甚至可以把多個字段在GROUP BY子句

SELECT [Name], [LocNo] 

FROM [02Kids] As Tmp 
GROUP BY [LocNo], [Name] 
HAVING Count(*)>1 

order by Name asc 

你想看到的只是名?

SELECT [Name] from 
(SELECT [Name], [LockNo] 
    FROM [02Kids] As Tmp 
    Group BY [LocNo] 
    HAVING Count(*) > 1 
) 
+1

第一不起作用,因爲名稱是而不是組的一部分,第二個不是OP想要的(CustNo)。 –

+0

沒錯,忽略了那一個。我改變了它。 –

+0

非常感謝。這很好。 –

0

請嘗試以下告訴你所有重複:

SELECT LocNo, CustNo, 02Kids.name FROM 02Kids 
INNER JOIN (SELECT name FROM 02Kids 
GROUP BY name HAVING count(*) > 1) dup 
ON 02Kids.name = dup.name;