0

私は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')

4

2 に答える 2

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 ...
于 2012-10-12T13:13:47.903 に答える
0

WHEREあなたが話す「X」値を含むフィールドに条件を追加して、句を拡張する必要があります。このフィールドが にあると仮定すると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 ))

上下に空白のある行を追加したことに注意してください。もちろん、コードを含むフィールドの名前が異なる場合は、フィールド参照を変更する必要があります。

于 2012-10-12T12:05:38.527 に答える