相关疑难解决方法(0)

如何在所有列中查找按键重复但不重复的行?

我正在使用一个表,它是一组其他表的摘录.根据键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)

sql t-sql sql-server-2008

14
推荐指数
1
解决办法
3754
查看次数

标签 统计

sql ×1

sql-server-2008 ×1

t-sql ×1