select * from YKB LEFT OUTER JOIN tj_grade on tj_grade.连接字段=YKB.连接字段 LEFT OUTER JOIN tj_store_grade on tj_store_grade.连接字段=tj_grade.连接字段 where 条件

解决方案 »

  1.   

    数据类型转换错误,1.5不能隐式转换成INT类型
      

  2.   

    所有的数据,没有1.5,而且那些字段都是varchar型的,没有int型,他转换int干什么呢?
      

  3.   


     YKB.CValue >= tj_grade.MINVAL AND 
                  YKB.CValue <= tj_grade.MAXVAL AND YKB.XXDM = tj_grade.XXDM这个几个字段里没有INT型?
      

  4.   

    ...有,才看见,YKB.CValue是varchar,tj_grade.MINVAL和tj_grade.MAXVAL是int,怎么转换呢?
      

  5.   

    还有个问题,就是YKB.CValue里面的值竟然有的存了汉字,如何能把不能转换成int型的行剔除呢?防止转换类型的时候出错
      

  6.   

    --try
    SELECT DERIVEDTBL.usid, DERIVEDTBL.xxdm, DERIVEDTBL.cvalue, DERIVEDTBL.date1, 
          DERIVEDTBL.pd1, tj_store_grade.PD AS pd2 
    FROM (SELECT YKB.studyid usid, YKB.XXDM xxdm, YKB.CValue cvalue, tj_grade.PD pd1, 
                  CONVERT(varchar(10), YKB.StudyDate, 121) date1 
            FROM YKB LEFT OUTER JOIN tj_grade 
    ON CASE ISNUMERIC(YKB.CValue) WHEN 1 THEN CAST(ROUND(YKB.CValue,0) as int) else tj_grade.MINVAL-1 end
    between tj_grade.MINVAL and tj_grade.MAXVAL 
    AND YKB.XXDM = tj_grade.XXDM 
            WHERE (YKB.StudyID = '1211180001')) DERIVEDTBL LEFT OUTER JOIN 
          tj_store_grade ON DERIVEDTBL.date1 = tj_store_grade.TJDATE AND 
          tj_store_grade.KSBH = '0003' AND DERIVEDTBL.usid = tj_store_grade.USERID 
      

  7.   

    --如果要过滤掉不是数字的行,可以在where后面加上条件ISNUMERIC(YKB.CValue)=1
    SELECT DERIVEDTBL.usid, DERIVEDTBL.xxdm, DERIVEDTBL.cvalue, DERIVEDTBL.date1, 
          DERIVEDTBL.pd1, tj_store_grade.PD AS pd2 
    FROM (SELECT YKB.studyid usid, YKB.XXDM xxdm, YKB.CValue cvalue, tj_grade.PD pd1, 
                  CONVERT(varchar(10), YKB.StudyDate, 121) date1 
            FROM YKB LEFT OUTER JOIN tj_grade 
    ON CASE ISNUMERIC(YKB.CValue) WHEN 1 THEN CAST(ROUND(YKB.CValue,0) as int) else tj_grade.MINVAL-1 end
    between tj_grade.MINVAL and tj_grade.MAXVAL 
    AND YKB.XXDM = tj_grade.XXDM 
            WHERE ISNUMERIC(YKB.CValue)=1 and (YKB.StudyID = '1211180001')) DERIVEDTBL LEFT OUTER JOIN 
          tj_store_grade ON DERIVEDTBL.date1 = tj_store_grade.TJDATE AND 
          tj_store_grade.KSBH = '0003' AND DERIVEDTBL.usid = tj_store_grade.USERID