2013-10-14 4 views
0

У меня есть набор результатов, который является таблицей отношений. Я преобразовываю их данные из одной схемы в другую. Там таблица отношений как строка отношений для каждого человека. поэтому, например, , если в счете есть bob, есть строка, которая имеет контакт и контакт 1.Как сравнить два разных столбца, противоположных друг другу в mssql

Контактное лицо является основным лицом в отношениях. В их системе Бобу нужно будет иметь отдельный ряд, в котором он будет основным.

поэтому строки в их БД будет выглядеть следующим образом

Contactid | Contactid1 | Description 
123  | 456  |Gold Club Dinner 
456  | 123  |Gold Club Dinner 

В то время как в моей схеме отношения выглядит следующим образом

Contactid | Contactid1 | Description 
123  | 456  |Gold Club Dinner 

Мне нужно знать способ, чтобы получить верхнюю 1 для каждого группы в первом db, так что я не получаю тысячи дубликатов в структуре таблицы.

Любые идеи?

+1

Откуда вы знаете, что «правильно»? Вы пробовали выбрать верхний х ...? – Andrew

ответ

1

Попробуйте

select distinct 
    case when contactID<contactID1 then contactID else contactID1 end , 
    case when contactID<contactID1 then contactID1 else contactID end , 
    description 
from yourtable 

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

+0

Это хороший! +1 – Kaf

+0

Запрос работает отлично, если я использую только аргументы case, но если вы добавите больше столбцов, таких как столбец описания, как в запросе. Я получаю почти тот же результат, что и select *, потому что в большинстве случаев описание отличается между строками, поэтому они по-прежнему обрабатываются как отдельные строки. –

+0

Итак, как вы определяете, какая из строк правильная? – podiluska

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