2016-09-23 149 views
0

我试图制作一份报告,列出活动客户端(case_status ='A')谁拥有附加到他们的旧版本没有更新,但是我们的数据库布局的方式是将所有文档都列在一张表中,因此有些客户会附上十几种不同的文档。其中一些是重复的文件。选择与一个列值相关但不是另一个的客户端

Ex。

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

我需要知道谁拥有“DIAGDOC”的doc_code并没有“DIAGDOC5”的doc_code,所以我们知道需要更新谁。

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和except块删除所有那些diagdoc5只留下那些过时的文件

+0

我似乎让一些客户在裂缝中滑倒。试图找出原因。 –

+1

有没有像diagdoc2这样的文件,但没有diagdoc正在通过?用'diagdoc%'替换顶部块中的= diagdoc会过滤结果给任何拥有文件版本但不是最新版本的人,所以有文档2,3,4,5的人不会通过,但有人2,3,4然而,他们不会与我原来的查询完全吻合 – MarkD

+0

其实我认为这有效。我之前没有使用过除外条款,但我认为这将是我最新的好朋友。我们有一个临床人员更新了两个文件,这些文件恰好在我今天早上做的清单的顶部。我会再做点检查,然后给你一个复选标记。 –

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