2013-05-09 2 views
2

У меня 2 столбцов данных, которые мне нужно сравнить друг с другом - Колонка A и B. КолонкаSQL-запрос сервера с таким же функциональными возможностями, как Excel ВПР

Колонка A:

Steve 
Jane 
Mary 
Peter 
Ed 
Scott 
Ted 

Колонка B:

Peter 
Scott 
David 
Nancy 
  • Колонка A имеет больший объем данных, чем на колонке B.
  • Но оно не может иметь все значения в столбце B.

мне нужно, чтобы выяснить, какие из значений в столбце B являются также в столбце A.

Ожидаемый результат для приведенных выше данных образца:

Peter TRUE 
Scott TRUE 
David FALSE 
Nancy FALSE 
  • Необходимо использовать SQL Server/T-SQL для получения этого вывода.
  • Колонка A и B Колонка являются поля в 2-х отдельных таблицах
  • Там нет других столбцов в таблицах 2

Спасибо за вашу помощь!

ответ

8
select 
    b.columnb, 
    case when a.columna is null then 'FALSE' else 'TRUE' end 

from 
    tableb b left outer join 
    tablea a on b.columnb = a.columna 
3

Проблема с левой присоединиться, что там могут быть дубликатами в таблице А.

Если это вопрос, то вы можете сделать это:

select b.col, (case when a.val is NULL then 'FALSE' else 'TRUE' end) 
from b left outer join 
    (select distinct a.val 
     from a 
    ) a 
    on b.col = a.val; 

Альтернативный способ выражения это использует коррелированный подзапрос. Это ставит всю логику в select:

select b.col, 
     (case when exists (select 1 from a where a.val = b.col) 
      then 'TRUE' 
      else 'FALSE' 
     end) 
from b 
+0

Эта возможность не была упомянута в первоначальном вопросе, так что это на самом деле не заслуживают ответа специально для него. В любом случае, почему вы предполагаете, что если исходный список содержит два упоминания о конкретном имени, то вывод должен содержать только одно упоминание об этом имени? И почему бы вам просто не сделать SELECT DISTINCT в базовом запросе (вместо использования подзапроса)? – ExactaBox

+0

@ExactaBox. , , Вопрос в том, как получить функциональность, похожую на VLOOKUP (на самом деле это больше похоже на ISNUMBER (MATCH())). Эта функция * никогда * не дублирует строки, и ни один из них не должен иметь эквивалент SQL. Помещение выделенного во внешнем элементе не работает, потому что у вас могут быть дубликаты в первой таблице, и вы хотите их сохранить. –

+0

OK Я понимаю, что вы говорите. Я предполагаю, что столбец A находится в таблице A, столбец B находится в таблице B. Если таблица A имеет дубликаты, я согласен. Но в вашем ответе говорится: «В таблице B могут быть дубликаты». Мы просто смешиваем исходный список, и список просматривается. – ExactaBox

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

  • Нет связанных вопросов^_^