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