下面是我的問題的簡化示例。我有一個表,其中有一個「名稱」列有重複的條目:在這個重命名重複的行
ID Name
--- ----
1 AAA
2 AAA
3 AAA
4 BBB
5 CCC
6 CCC
7 DDD
8 DDD
9 DDD
10 DDD
做一個GROUP BY像SELECT Name, COUNT(*) AS [Count] FROM Table GROUP BY Name
結果:
Name Count
---- -----
AAA 3
BBB 1
CCC 2
DDD 4
我只關心重複,所以我「會增加一個HAVING子句,SELECT Name, COUNT(*) AS [Count] FROM Table GROUP BY Name HAVING COUNT(*) > 1
:
Name Count
---- -----
AAA 3
CCC 2
DDD 4
瑣碎的,到目前爲止,但現在事情變得棘手:我需要一個查詢來獲取我所有的重複記錄,但有一個很好的遞增中dicator添加到名稱列。結果應該是這個樣子:
ID Name
--- --------
1 AAA
2 AAA (2)
3 AAA (3)
5 CCC
6 CCC (2)
7 DDD
8 DDD (2)
9 DDD (3)
10 DDD (4)
注排4「BBB」被排除在外,而第一個重複的保持原有名稱。
使用EXISTS
聲明爲我提供了所需的所有記錄,但我如何着手創建新的Name值?
SELECT * FROM Table AS T1
WHERE EXISTS (
SELECT Name, COUNT(*) AS [Count]
FROM Table
GROUP BY Name
HAVING (COUNT(*) > 1) AND (Name = T1.Name))
ORDER BY Name
我需要創建一個UPDATE語句來修復所有重複項,即根據此模式更改名稱。
更新: 現在想通了。這是我錯過的PARTITION BY條款。
我挖掘CTE。我希望我會更頻繁地使用它們。 – SQLMason 2011-03-03 04:00:47
您的解決方案看起來更整潔,但我無法讓它工作。 – 2011-03-03 04:53:36
@Jakob Gade-你是否收到錯誤或是不是產生你想要的結果? – Thomas 2011-03-03 05:31:52