Предполагая, что вам нужно количество дубликатов из таблицы с наибольшим количеством повторений для каждого значения, вы можете сделать это с помощью функции окна ROW_NUMBER()
, чтобы исключить дубликаты по их последовательности с набором повторений в каждой таблице.
SELECT Name FROM (
SELECT Name, ROW_NUMBER() OVER ( PARTITION BY Name ORDER BY Name ) AS Row
FROM T1
UNION
SELECT Name, ROW_NUMBER() OVER ( PARTITION BY Name ORDER BY Name ) AS Row
FROM T2
) x
ORDER BY Name
Чтобы увидеть, как это работает, мы добавляем две B
строки к T2
, затем делаем следующее:
SELECT Name, ROW_NUMBER() OVER ( PARTITION BY Name ORDER BY Name ) AS Row
FROM T1
Name Row
A 1
A 2
B 1
C 1
SELECT Name, ROW_NUMBER() OVER ( PARTITION BY Name ORDER BY Name ) AS Row
FROM T2
Name Row
A 1
B 1
B 2
D 1
E 1
Теперь UNION
их без ALL
для объединения и удаления дубликатов:
SELECT Name, ROW_NUMBER() OVER ( PARTITION BY Name ORDER BY Name ) AS Row
FROM T1
UNION
SELECT Name, ROW_NUMBER() OVER ( PARTITION BY Name ORDER BY Name ) AS Row
FROM T2
Name Row
A 1
A 2
B 1
B 2
C 1
D 1
E 1
Последний запрос вверху просто удаляет столбец Row
и сортируя результат, чтобы обеспечить порядок возрастания.
См. SQL Fiddle для демонстрации.