Чтобы увидеть все строки в этом, вам нужно присоединиться к BAD_TABLE в качестве примера в исходном вопросе.

отаю с таблицей, которая является выдержкой из набора других таблиц. Все строки таблицы извлечения должны быть уникальными в соответствии с ключами 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

затем

SELECT DISTINCT D1, D2, D3, C4, C5, C6
FROM BAD_TABLE

будет работать, так как нет разницы между строками, которые дублируются (D1, D2, D3). Но если таблица содержит

D1  D2  D3  C4  C5  C6
=== === === === === ===
A   B   C   X1  X2  X3
A   B   C   X1  X2  X4

тогда SELECT DISTINCT вернет две строки для ключа (A, B, C). Кроме того, мы должны были бы решить, какой из X3 или X4 был «правильным» значением.

Я знаю, как найти дубликаты (D1, D2, D3). Я даже знаю, как найти дубликаты во всех столбцах (кроме столбца IDENTITY):

;
WITH DUPLICATES(D1,D2,D3) AS
(
    SELECT D1, D2, D3
    FROM SOURCE
    GROUP BY D1, D2, D3
    HAVING COUNT(*)>1
)
SELECT S.D1, S.D2, S.D3, S.C4, S.C5, S.C6
FROM SOURCE S
INNER JOIN DUPLICATES D
    ON S.D1 = D.D1 AND S.D2 = D.D2 AND S.D3 = D.D3
ORDER BY S.D1, S.D2, S.D3, S.C4, S.C5, S.C6

Вопрос в том, как найти подмножество вышеуказанного набора результатов, которые являются дубликатами на (D1, D2, D3), ноне дубликаты на (D1, D2, D3, C4, C5, C6)?

Ответы на вопрос(5)

Ваш ответ на вопрос