2016-09-23 153 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