2015-07-13 4 views
0

Так что я пытаюсь отфильтровать одну таблицу по значениям нескольких строк, сгруппированных по одному столбцу, которые соответствуют нескольким строкам другой таблицы, которые сгруппированы по столбцу. Для Exmaple:T-SQL Сравнение группы строк с другими группами строк

###Table1### 
+--------+-------+ 
| Symbol | Value | 
+--------+-------+ 
| A  |  1 | 
| A  |  2 | 
| A  |  3 | 
| B  |  9 | 
| B  |  8 | 
+--------+-------+ 

###Table2### 
+--------+-------+ 
| Symbol | Value | 
+--------+-------+ 
| C  |  9 | 
| C  |  8 | 
| D  |  1 | 
| D  |  2 | 
| D  |  4 | 
| E  |  9 | 
| E  |  8 | 
| F  |  1 | 
| F  |  2 | 
| F  |  3 | 
+--------+-------+ 

Запрос должен возвращать C, E, F и D, но не потому, что значения на совпадение значения F, и значения матча B значения C и E.

Надеюсь, это имеет смысл.

+0

Извините, формат для таблиц не сработал. –

ответ

1

Вы можете получить соответствие, присоединив таблицы к значению, а затем подсчитывая символы. Для данных, это должно работать:

select t2.symbol, t1.symbol 
from (select t1.*, count(*) over (partition by symbol) as cnt 
     from table1 t1 
    ) t1 join 
    table2 t2 
    on t1.value = t2.value 
group by t1.symbol, t2.symbol, t1.cnt; 
having count(*) = t1.cnt 

Это предполагает:

  • нет дубликатов в любой таблице.
  • Вы ищете строки в table2, которые соответствуют table1, но table2 могут иметь дополнительные значения не в table1.
+0

Я действительно ценю усилия, но я боюсь, что это не совсем ответит на проблему. Вы видите, что все значения символа из таблицы 1 должны быть в значении для символа таблицы 2 для соответствия. Ваше решение, похоже, просто соответствует каждому потенциальному соответствию ценности для ценности. –

+0

@SteveBishop. , , Я не совсем уверен, что ваш комментарий должен означать. Это должно возвращать символы во второй таблице, которые соответствуют символам в первой таблице, имея одинаковые значения. Я только что отредактировал ответ, потому что я упустил предложение 'having'. Возможно, это вызвало путаницу. –

+0

Да, у меня не было заявления. Это могло быть проблемой. Я запустил его снова и посмотрю, исправляет ли он это. Еще раз спасибо. –

Смежные вопросы