有两张表,如下:
BA(这张表描述了住院病人的病案),字段如下:
bah(病案号)、xb(性别)、xm(姓名)、nl(年龄)、gzdw(工作单位)...micd1(诊断号1)、micd2(诊断号2)、micd3(诊断号3);ICD9(国际病种编号)
micd(病种编号)、name(病名)注:micd1、micd2、micd3中micd2、micd3不是每个病人都有,只有进行了第二次诊端才有micd2码、进行了第三次诊断才有micd3码,否则为空;我想实现一下查询:
  我要显示满足条件是:nl>40 or gzdw like ‘%北京%’ or xm like '%王%' or
 病名(可能是ICD码,可能是汉字)
这样条件的 BA表字段 和 ICD.name字段;
 我写了下面的查询,但结果很惨,请大家帮忙,怎么写才行?
use ZhuYuan
Select blkpki01.*,icd9.jbname from blkpki01,icd9 where 
bzb like '%北京%' 
             
       and ( micd3<>'' and icd9.micd = micd3 
               or micd3 =''and jbbh2 <>''  and icd9.micd =micd2
               or micd3 =''and micd2 =''and micd1<>'' and icd9.micd=icd9.micd)
or cast(nl as char(8)) > '40'  and ( micd3<>'' and icd9.micd = micd3 
               or micd3 =''and micd2 <>''  and icd9.micd =micd2
               or micd3 =''and micd2 =''and micd1<>'' and icd9.micd=icd9.micd)               

解决方案 »

  1.   

    你的SQL中会有点问题,起码在应该在条件中加 micd3 is null,如果建表的时候设置了默认值为‘’,那micd3 is null可以不要!
      

  2.   

    不好意思,bzb 改为gzdw,jbbh2改为micd2
      

  3.   

    select T1.*,T2.Name as Name1,T3.Name as Name2,T3.Name as Name3 from BA T1 inner join ICD9 T2 
    on T1.Micd1=T2.Micd left outer join ICD9 T3 on T1.Micd2=T3.Micd left outer join ICD9 T4 on 
    T1.Micd3=T4.Micd where T1.nl>40 or gzdw like '%北京%' or xm like '%王%' or (T2.Name=病名 or T3.Name=病名
    or T4.Name=病名 or T1.Micd1=病名 or T1.Micd1=病名 or T1.Micd2=病名 or T1.Micd3=病名)