0

ここに画像の説明を入力

tblVisits に「tobacco」というビット属性があります。tblICD は医療コードのリストで、icd_jxn はジャンクション テーブルです。tblICD.Descrip は、医療コード (ICD_ID) のテキスト記述です。NOT医療コードのリストに「タバコ」という文字列が含まれている人が、bit「タバコ」属性が 1 に設定されているかどうかを確認しようとしています。以下のクエリは私の最善の推測ですが、正しくありません。

SELECT tblVisits.kha_id, tblVisits.tobacco from tblvisits
WHERE NOT EXISTS (SELECT icd_jxn.kha_id, icd_jxn.icd_fk, tblICD.icd_id, tblICD.Descrip
                   FROM icd_jxn inner join 
                        tblICD on icd_jxn.icd_fk = tblicd.icd_id
                       WHERE (tblicd.descrip like N'%tobacco%') AND (tblVisits.kha_id = icd_jxn.kha_id) and (tblvisits.tobacco=1))
4

2 に答える 2

1

このクエリは、患者を要約するものと考えると、より単純に見えます。患者にたばこ属性が設定されていますか? 特許の説明にたばこは含まれていますか?

次のクエリでは、このロジックを使用しています。

select *
from (select tv.kha_id, tv.tobacco,
             MAX(case when charindex(N'tobacco', ticd.descrip) > 1 then 1 else 0 end) as tobacco_description,
      from tblvisits tv join
           icd_jxn jxn
           on tv.kha_id = jxn.kha_id join
           tblICD ticd
           on jxn.icd_fk = ticd.icd_fx
      group by tv.kha_id, tv.tobacco
     ) t
where tobacco_description = 1 and tobacco_description = 0

サブクエリは、患者レベルでデータを要約します。適切な「having」句を追加することで、それを排除できます。ただし、サブクエリの方が読みやすく、同じパフォーマンスが得られるはずです。また、たばこ、はさみ、たばこの記述のすべての異なる組み合わせを数えることができます。

最後に、「like」を「charindex」に置き換えます。後者の方が効率的だからです。

于 2012-05-08T18:42:11.777 に答える
1

ケースは保証されません

select v.kha_id, v.tobacco
from tblvisits v
where v.tobacco = 1
and not exists (select null from icd_jxn j
     inner join tblICD i on j.icd_ICD_FK= i.IDC_ID
     where j.KHA_ID = v.KHA_ID
     and i.Descrip like N'%tobacco%');
于 2012-05-08T18:36:59.007 に答える