2016-01-13 4 views
0

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

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

Select c.last_name, c.first_name, c.sex, c.date_of_birth, c.record_nbr, 
case when ph.policy_nbr = cp.policy_nbr then ph.policy_nbr else 'No Match' 

From table ph 

Left join client c 
On ph.last_name = c.last_name 
And ph.first_name = c.first_name 
And ph.date_of_birth = c.date_of_birth 
And ph.sex = c.sex 
Left join person_payer cp 
On c.person_id = cp.person_id 

Group by c.last_name, c.first_name,c.date_of_birth, 
c.sex,ph.policy_num, cp.policy_nbr 

Идея заключается в том, чтобы найти соответствие beween таблиц, основанных на фамилии, имени, DOB и секса. Затем я хочу проверить соответствие номера политики или нет совпадения. Существует ли номер полиса в записи пациентов? К сожалению, это приводит к совпадениям и отсутствию совпадений из-за наличия нескольких номеров политик в записи клиентов. Как я могу сделать список отчетов клиентом один раз и только после перечисления «нет соответствия» или соответствия номеру политики.

+1

Выборочные данные и желаемые результаты будут уточнить, что вы пытаетесь сделать. –

+0

Вам не хватает соединения, так как нет присоединения к псевдониму таблицы pp. И ph является псевдонимом таблицы с именем «таблица»? –

+0

Итак, я хочу показать клиентам, где точное совпадение найдено по фамилии, имени, добе и полу. Затем сообщите, найден ли соответствующий номер политики в таблице person_payer для клиента. Проблема состоит в том, что таблица person_payer содержит несколько номеров политик. Мне нужно, чтобы он показывался один раз и только один раз, когда найдено совпадение или нет совпадения. Я добавлю еще больше, вернувшись домой. –

ответ

0

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

Select c.last_name, c.first_name, c.sex, c.date_of_birth, c.record_nbr, 
ISNULL((Select top 1 ph.policy_nbr from PolicyTable ph where ph.last_name = c.last_name 
And ph.first_name = c.first_name 
And ph.date_of_birth = c.date_of_birth 
And ph.sex = c.sex 
And cp.policy_nbr = ph.policy_nbr), 'No Match') as PolicyNumber 

From client c 
Left join person_payer cp On c.person_id = cp.person_id 
+0

К сожалению, это приводит к результатам, но запрос никогда не прекращается. –

0
Select c.last_name, c.first_name, c.sex, c.date_of_birth, c.record_nbr, 
isnull(cp.policy_nbr, 'No Match') 

From table ph 

Left join client c 
On ph.last_name = c.last_name 
And ph.first_name = c.first_name 
And ph.date_of_birth = c.date_of_birth 
And ph.sex = c.sex 
Left join person_payer cp 
On c.person_id = cp.person_id 
and ph.policy_nbr = cp.policy_nbr 

Group by c.last_name, c.first_name,c.date_of_birth, 
c.sex,ph.policy_num, cp.policy_nbr 
+0

Спасибо, однако я заметил, что это приводит к результатам, но во всех столбцах имеется много нулевых значений. –

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