2016-09-23 2 views
0

Я пытаюсь сделать отчет, в котором перечислены активные клиенты (case_status = 'A'), у которых есть старая версия прикрепленного к ним документа без новой, но способ, которым наша база данных изложена, все документы перечислены в одной таблице, поэтому некоторые клиенты будут иметь дюжину различных документов, прикрепленных к ним. Некоторые из них являются дублирующими документами.Выбор клиентов, имеющих связь с одним значением столбца, но не другое

Ex.

patient_id  Doc_code 
p01   doc1 
p01   doc2 
p01   doc3 
po1   doc4 
p02   doc2 
po2   doc3 

Мне нужно знать, кто имеет doc_code из «DIAGDOC» и не имеет doc_code из «DIAGDOC5», поэтому мы знаем, кто нуждается в обновлении.

select 

de.patient_id, 
de.episode_id 

from doc_entity de 
join patient p 
on p.patient_id = de.patient_id and p.episode_id = de.episode_id 
where p.case_status = 'A' 

group by de.patient_id, de.episode_id, de.doc_code 
having (de.doc_code in ('DIAGDOC'))and (de.doc_code not in ('DIAGDOC5')) 
order by de.patient_id, de.episode_id 

ответ

1

Будет ли за исключением работы?

select 
de.patient_id, 
de.episode_id 

from doc_entity de 
join patient p 
on p.patient_id = de.patient_id and p.episode_id = de.episode_id 
where p.case_status = 'A' 
and de.doc_code = 'DIAGDOC' 

EXCEPT 

select 

de.patient_id, 
de.episode_id 

from doc_entity de 
join patient p 
on p.patient_id = de.patient_id and p.episode_id = de.episode_id 
where p.case_status = 'A' 
and de.doc_code = 'DIAGDOC5'* 

верхний блок возвращает все строки с diagdoc и кроме блока удаляет все те, с diagdoc5 оставив только те, с устаревшую документа

+0

я, кажется, чтобы некоторые клиенты скользнули по трещинам. Попытка выяснить, почему. –

+1

есть люди с документами типа diagdoc2, но не с диаддоком, которые проходят? заменяя = diagdoc в верхнем блоке таким же, как «diagdoc%», затем фильтрует результаты любому, у кого есть версия файла, но не последняя, ​​так что кто-то с документами 2,3,4,5 не пришел, но кто-то с 2,3,4, однако, они бы не были cuaght с моим первоначальным запросом – MarkD

+0

На самом деле я думаю, что сработало. Раньше я не использовал предложение Except, но я думаю, что это будет мой новый лучший друг. У нас был клинический человек, который обновил два документа, которые оказались в верхней части моего списка, который я сделал сегодня утром. Я сделаю еще немного проверки места, а затем отправлю вам галочку. –

1

ли ниже работы -

select 
    aa.patient_id, aa.episode_id 
from 
(
    select 
      de.patient_id 
     , de.episode_id 
     , MAX(case doc_code WHEN 'DIAGDOC' THEN 'YES' ELSE 'NO' end) as 'DIAGDOCExists' 
     , MAX(case doc_code WHEN 'DIAGDOC5' THEN 'YES' ELSE 'NO' end) as 'DIAGDOC5Exists' 
    from 
     doc_entity de join patient p on p.patient_id = de.patient_id and p.episode_id = de.episode_id 
    where 
     p.case_status = 'A' 
    group by 
     de.patient_id, de.episode_id 
) as aa where aa.DIAGDOCExists = 'YES' and aa.DIAGDOC5Exists = 'NO' 
+0

Я получаю синтаксическую ошибку от того, когда я думаю, потому что там должно быть только 1 на линии 8 и 9, но когда я удаляю дубликат, когда я получаю синтаксическую ошибку на) в строке 8. –

+1

попробуйте сейчас. не уверен, как двойной, когда его представили, также отсутствовала оговорка конца. – Neeraj