我正在使用一个表,它是一组其他表的摘录.根据键D1,D2和D3,提取表的所有行都应该是唯一的.他们不是.看来早期的开发人员试图通过使用SELECT DISTINCT从该表中查询的所有列来解决此问题.这将起作用,但仅当在(D1,D2,D3)上重复的每一行在非键列上都是重复的时(忽略添加到提取表中的IDENTITY列).
换句话说,给定行如下:
D1 D2 D3 C4 C5 C6
=== === === === === ===
A B C X1 X2 X3
A B C X1 X2 X3
Run Code Online (Sandbox Code Playgroud)
然后
SELECT DISTINCT D1, D2, D3, C4, C5, C6
FROM BAD_TABLE
Run Code Online (Sandbox Code Playgroud)
将"工作",因为重复的行(D1,D2,D3)之间没有区别.但如果表中包含
D1 D2 D3 C4 C5 C6
=== === === === === ===
A B C X1 X2 X3
A B C X1 X2 X4
Run Code Online (Sandbox Code Playgroud)
然后SELECT DISTINCT将为键(A,B,C)返回两行.此外,我们必须决定X3或X4中的哪一个是"正确的"值.
我知道如何在(D1,D2,D3)上找到重复项.我甚至知道如何在所有列(IDENTITY列除外)中找到重复项:
;
WITH DUPLICATES(D1,D2,D3) AS
(
SELECT D1, D2, D3
FROM SOURCE
GROUP …Run Code Online (Sandbox Code Playgroud)