4
說我有此表SQL刪除與重複的值的行,同時保持一個
id | data | value
-----------------
1 | a | A
2 | a | A
3 | a | A
4 | a | B
5 | b | C
6 | c | A
7 | c | C
8 | c | C
我想刪除與重複的值的那些行的每個數據,同時保持與所述最小ID的一個,例如其結果將是
id | data | value
-----------------
1 | a | A
4 | a | B
5 | b | C
6 | c | A
7 | c | C
我知道一個辦法做到這一點是做一個聯盟,如:
SELECT 1 [id], 'a' [data], 'A' [value] INTO #test UNION SELECT 2, 'a', 'A'
UNION SELECT 3, 'a', 'A' UNION SELECT 4, 'a', 'B'
UNION SELECT 5, 'b', 'C' UNION SELECT 6, 'c', 'A'
UNION SELECT 7, 'c', 'C' UNION SELECT 8, 'c', 'C'
SELECT * FROM #test WHERE id NOT IN (
SELECT MIN(id) FROM #test
GROUP BY [data], [value]
HAVING COUNT(1) > 1
UNION
SELECT MIN(id) FROM #test
GROUP BY [data], [value]
HAVING COUNT(1) <= 1
)
但這種解決方案有通過兩次重複同一組(考慮到實際情況是大於20列的羣組)
對於複雜的問題,我寧願用較少的代碼來簡化答案。有沒有更簡潔的方法來編碼?
謝謝
這真是太棒了!只有一位SQL專家纔能有這樣出色的心態,謝謝! – user1589188
@ user1589188:很高興,我的朋友。也增加了小提琴的例子。 –