2

患者が別の場所に移動したときにユーザーが入力するフォームがあります。

フォームの関連部分は次のようになります。 ここに画像の説明を入力

いいえの患者の数を数えたいDate of Return

関連表 -

form_names - フォームのリスト

select id, name from form_names where id = 47

id    name
----- ----------------------
47    Transfer of Health Information

form_items - 各フォームの質問のリスト ( form_name)。

select id, form_name, text from form_items where form_name = 47

id          form_name   text
----------- ----------- ------------------------------------
1147        47          Date of Transfer:
1148        47          Sending Facility:
1155        47          Date of Return:

form_records - 特定の患者 ( pid) がフォーム ( ) に記入したことを示すレコードform_name

select id, pid, date, form_name From form_records where pid = 260 and form_name = 47

id          pid         date                    form_name
----------- ----------- ----------------------- -----------
16409       260         2013-04-24 09:33:29.000 47

ここで、関連する最後のテーブルは form_answers テーブルです。完了した回答のみがこのテーブルに入力されます。

ご覧のとおりDate of Return、フォームに値が入力されていないため、このテーブルには表示されません。

select id, form_record, form_item, text from form_answers where form_record = 16409

id                   form_record form_item   text
-------------------- ----------- ----------- -----------------------------------------
354535               16409       1147        04-24-2013
354536               16409       1148        Lawrence Jail
354537               16409       1149        Lawrence County Hospital
354538               16409       1151        NKMA

私はこのようなことを試しましたが、うまくいきません:

select
        count(*)
from
        form_names fn
                inner join form_items fi on fn.id = fi.form_name
                inner join form_records fr on fn.id = fr.form_name             
                left outer join form_answers fa on fr.id = fa.form_record and fi.id = fa.form_item
where
        fn.name like '%Transfer of Health Information%'
        and dateadd(dd, 0, datediff(dd, 0, fr.date)) = dateadd(dd, 0, datediff(dd, 0, getdate()))
        and fi.text like '%receiving facility%'
        and fa.id is NULL

返却日フィールドがない患者の数を見つけるにはどうすればよいですか

4

1 に答える 1

0

答えの結合は正しくないと思います。アイテムと fr.id の両方に参加する必要があります。

select count(*)  -- should this be "count(distinct pid)"?
from form_names fn inner join
     form_items fi
     on fn.id = fi.form_name inner join
     form_records fr
     on fn.id = fr.form_name left outer join          
     form_answers fa
     on fn.id = fa.form_item and fa.form_record = fr.id
where fn.name like '%Transfer of Health Information%'
      fn.text like '%Date of Return%' and
      dateadd(dd, 0, datediff(dd, 0, fr.date)) = dateadd(dd, 0, datediff(dd, 0, getdate())) and
      fi.text like '%receiving facility%' and
      fa.id is NULL;

他のフォームが条件を満たしていたため、クエリが失敗しました。

ちなみに、外部キーを主キーの名前と一致させる方がずっと簡単だと思います。_idそれを除けば、外部キーはテーブルの名前の後にorを付けるべきIdです。

于 2013-04-24T15:02:16.367 に答える