1

多肢選択式の回答の結果を含むテーブルに値が格納されています。選択肢は次のようになります。

Allergy 1
Cardiology  2
Chest Disease   4
Dermatology 8
Dialysis    16
Emergency Room  32
Ambulance Trips 64
Gastroenterology    128
General Medicine    256
General Surgery 512
Gynecology  1024
Hematology  2048
Methadone   4096
Neurology   8192
Neurosurgery    16384
Obstetrics  32768
Ophthalmology   65536
Orthopedics 131072
Physical Therapy    262144
Plastic Surgery 524288
Podiatry    1048576
Proctology  2097152
Psychiatry  4194304
Surgery Performed   8388608
Thoracic Surgery    16777216
Urology 33554432
Outside X-Rays  67108864
Diagnostic Test(outside)    134217728
Other Trips/Outside Consults    268435456

誰かが回答を入力すると、回答/値は次のように保存されます。

id                   form_record form_item   value                entered_date
-------------------- ----------- ----------- -------------------- -----------------------
376418               17453       2943        1114241              2013-05-23 09:56:06.000
376889               17475       2943        1056896              2013-05-23 11:00:06.000

したがって、たとえば、ユーザーが何を選択したかを確認しようとするとNeurology、今日は次のようにします。

select
    fa.value & 8192 as 'Neurology'
from
    form_records fr
        inner join form_names fn on fn.id = fr.form_Name
        inner join form_items fi on fn.id = fi.form_name
        inner join form_answers fa on fr.id = fa.form_record
            and fa.form_item = fi.id
where
    fn.name like '%Consultation Review Form%'   
    and dateadd(dd, 0, datediff(dd, 0, fr.date)) = dateadd(dd, 0, datediff(dd, 0, getdate()))

私の結果は次のとおりです。

Neurology
--------------------
0
8192

(2 row(s) affected)

この回答を完了した 2 番目のユーザーは を選択しましNeurologyたが、この回答を完了した最初のユーザーは を選択しませんでしたNeurology

やろうとしているのは、Neurology回答/値の数の日のカウントを取得することです。

これを行うことにより:

select
    count(fa.value & 8192) as 'Neurology'

を返します2。返してほしい1

4

1 に答える 1

3
select
    count(NULLIF(fa.value & 1, 0)) as 'Neurology'
    ...

これにより、「一致なし」が NULL に変更され、COUNT は NULL を無視します。

于 2013-05-23T15:24:42.117 に答える