Получение количества общих терминов в двух таблицах, где есть дубликаты - PullRequest
0 голосов
/ 30 ноября 2010

Рассмотрим следующие две таблицы в SQL Server 2008:

Таблица1, которая имеет только одно поле int: Term1

Таблица2, которая также имеет только одно поле int: Term2. (Да, я знаю - мне не хватает воображения.)

.

Допустим, я вставляю следующие значения в таблицу 1: 1, 2, 5, 5, 6, 7

И я вставляю следующие значения в Таблицу2: 3, 4, 5, 5, 8, 9

.

Я хочу выполнить запрос, в котором я найду термины, общие для обеих таблиц, и хочу, чтобы они были парными. Поэтому, когда есть дубликаты (как в данном случае - 5 и 5), я хочу, чтобы для каждой найденной пары была отдельная строка. Другими словами, Я бы хотел, чтобы две пары из 5 вернули в качестве двух общих терминов.

Как мне это сделать? Если я выполню простое внутреннее объединение таблиц Table1 и Table2, я получу четыре пары возвращенных 5-х.

.

РЕДАКТИРОВАТЬ: Я должен был сделать это более ясным, меня интересуют любые общие ценности, а не только дубликаты. Дело в том, что с дубликатами сложнее иметь дело.

Поэтому, если я добавлю следующие значения в Таблицу 1: 1, 2, 5, 5, 5, 6, 7, 8

И я вставляю следующие значения в Таблицу 2: 3, 4, 5, 5, 5, 6, 9, 0

Тогда я хочу видеть 5, 5, 5, 6 в качестве общих терминов.

1 Ответ

0 голосов
/ 01 декабря 2010
DECLARE @Table1 TABLE (Term1 int)
INSERT INTO @Table1 VALUES (1),(2),(5),(5),(5),(6),(7),(8)
DECLARE @Table2 TABLE (Term2 int)
INSERT INTO @Table2 VALUES (3),(4),(5),(5),(5),(6),(9),(0)

;WITH T1 AS
(
SELECT Term1, ROW_NUMBER() OVER (PARTITION BY Term1 ORDER BY (SELECT 0)) RN1
FROM @Table1
),
T2 AS
(
SELECT Term2, ROW_NUMBER() OVER (PARTITION BY Term2 ORDER BY (SELECT 0)) RN2
FROM @Table2
)
SELECT T1.Term1
FROM T1 JOIN T2 ON T1.Term1=T2.Term2 AND T1.RN1=T2.RN2

Выход

Term1
-----------
5
5
5
6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...