我对SQL很新,我完全陷入了这个问题。
我已经为一家医疗机构撰写了一份查询,其中提供了患者信息,他们的预约/哪个医疗服务提供者看到了患者,他们看到了什么位置以及在访问期间创建了哪些文件以及签收状态。
当结果返回时,该部分查询是准确的。 (由于在一次预约中产生了许多不同类型的文件,1名患者的许多行)
然而,我正在寻找的是一份已预约但尚未创建“X”文件的患者名单。我不想看到创建的其他文档的列表;特别是没有创建“X”的约会。 请帮忙!
这是我首先解释的查询,显示患者/预约信息以及已生成的特定文件。
SELECT prs.person_nbr, prs.last_name + ', '+ prs.first_name as Patient, prs.date_of_birth
, pm.description AS Provider
, lm.site_id
, appts.appt_type, appts.appt_date
, pd.document_desc, pd.signoff_status
FROM person prs
, patient_documents pd
, location_mstr lm
, provider_mstr pm
, appointments appts
WHERE prs.person_id = appts.person_id
and appts.enc_id = pd.enc_id
and appts.location_id = lm.location_id
and lm.site_id is not null
and appts.rendering_provider_id = pm.provider_id
and ((pd.document_desc IN ('bms_master_im', 'Master_Im', 'BMS_ob_master','BMS_GYN_master', 'BMS_bh_master')
and pd.signoff_status = 'P')
OR (pd.document_desc IN ('bms_master_im', 'Master_Im', 'BMS_ob_master', 'BMS_GYN_master', 'BMS_bh_master')
AND pd.signoff_status IS NULL ))
ORDER BY lm.site_id, Provider
其他信息: 尝试了一切建议。 详细说明,这是一个例子。
患者:JOHN SMITH 任命:20111201 创建的文档:work_letter,lab_req,master_im(master_im是IN子句列出的结果之一)患者:JANE WILCOX 任命:20120704 创建的文档:lab_results,test_action,immunization_record。
对于JOHN SMITH,结果表明他有一个master_im。基于已经编写的查询。
对于JANE WILCOX,结果将排除她,因为她的文件没有在IN条款中列出。但是,我希望在结果中看到她,以便我看到她没有创建IN子句中列出的master_im或任何其他文档。
我最终想要的是排除JOHN SMITH,因为他的约会确实创建了master_im文件;并包括JANE WILCOX,因为她有一个没有master_im的约会。 (master_im可以被我的查询的IN子句中的任何文档值替换)
***所有预约a)没有创建“x”文件的患者,或b)确实创建了“x”文件,但签收状态= P或NULL。 (B很容易弄明白,只需要帮助a)。我们希望忽略x中未包含的所有其他文档。
x ='bms_master_im','master_im','bms_ob_master','bms_gyn_master','bms_bh_master','ob_master','gyn_master','bh_master')
答案 0 :(得分:0)
您需要通过在包含" X"的字段上添加条件来扩展您的WHERE
子句。你说的价值观。假设此字段位于patient_documents.code
中,则WHERE子句变为:
WHERE prs.person_id = appts.person_id
and appts.enc_id = pd.enc_id
and appts.location_id = lm.location_id
and lm.site_id is not null
and appts.rendering_provider_id = pm.provider_id
and pd.code not in ('X', '...')
and ((pd.document_desc IN ('bms_master_im', 'Master_Im', 'BMS_ob_master','BMS_GYN_master', 'BMS_bh_master')
and pd.signoff_status = 'P')
OR (pd.document_desc IN ('bms_master_im', 'Master_Im', 'BMS_ob_master', 'BMS_GYN_master', 'BMS_bh_master')
AND pd.signoff_status IS NULL ))
请注意,我在顶部和底部添加了空白行。当然,如果包含代码的字段的名称不同,则应修改字段引用。
答案 1 :(得分:0)
编辑:
您需要在表上使用JOIN子句,在文档表上使用左连接。
例如:
FROM person prs,
JOIN appointments appts ON prs.person_id = appts.person_id
JOIN location_mstr lm ON appts.location_id = lm.location_id
JOIN provider_mstr pm ON ...
然后
LEFT JOIN patient_documents pd ON ...