私はSQLにかなり慣れていないので、このクエリに完全にとらわれています。
私は、患者情報、患者の予約/患者を見たプロバイダー、患者が見られた場所、その訪問中に作成されたドキュメント、およびサインオフステータスを取得する医療機関へのクエリを作成しました。
結果が返されると、クエリのその部分は正確です。(1回の予約でさまざまな種類のドキュメントが生成されたため、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句によって結果に含まれるリストの1つです)
患者:JANE WILCOX予定:20120704作成されたドキュメント:lab_results、test_action、immunization_record。
JOHN SMITHの場合、結果は彼がmaster_imを持っていることを示します。すでに書かれたクエリに基づいています。
JANE WILCOXの場合、彼女のドキュメントはIN句にリストされていないため、結果から彼女は除外されます。ただし、結果に彼女を表示して、master_imまたはIN句にリストされている他のドキュメントが作成されていないことを確認したいと思います。
私が最終的に探しているのは、JOHN SMITHの予定にはmaster_imドキュメントが作成されているため、除外することです。また、master_imを持たない予定があるため、JANEWILCOXを含めます。(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')