2011-01-19 80 views
2

我有以下查詢選擇姓和名的組合,並顯示我愚蠢。它起作用,而不是問題在這裏。如何創建一個SQL區別查詢並添加一些其他字段

我想包括其他三個領域供參考; Id,cUser和cDate。但是,這些附加字段不應用於確定重複項,因爲我可能不會得到任何重複項。

SELECT * FROM 
(SELECT FirstName, LastName, COUNT(*) as "Count" 
FROM Contacts 
WHERE ContactTypeID = 1 
GROUP BY LastName,FirstName 
) AS X 
WHERE COUNT > 1 
ORDER BY COUNT DESC 

有什麼建議嗎?謝謝!

回答

2
SELECT * 
FROM (
     SELECT *, COUNT(*) OVER (PARTITION BY FirstName, LastName) AS cnt 
     FROM Contacts 
     WHERE ContactTypeId = 1 
     ) q 
WHERE cnt > 1 
ORDER BY 
     cnt DESC 

這將返回每個重複記錄的所有字段。

+0

混賬人類驗證的東西....你打我吧... – Lamak 2011-01-19 15:17:04

0

如果這些字段都是一樣的,那麼你可以將它們包含在GROUP BY,它不會影響重複的檢測

如果他們沒有,那麼你必須決定你將應用到他們什麼樣的聚集函數,例如MAX()或MIN()會起作用,並會給你一些指示,說明哪些值與重複項的某些屬性相關聯。

否則,如果你想看到所有的記錄,你可以加入回源

SELECT X2.* FROM 
(SELECT FirstName, LastName, COUNT(*) as "Count" 
FROM Contacts 
WHERE ContactTypeID = 1 
GROUP BY LastName,FirstName 
) AS X INNER JOIN Contact X2 ON X.LastName = X2.LastName AND X.FirstName = X2.FirstName 
WHERE COUNT > 1 
ORDER BY COUNT DESC 
相關問題