select 
(case when (T2.f3-T3.f1)=0 or (T1.f3+T3.f2)=0 
then 0 
else 
T1.f1+T2.f1/(T2.f3-T3.f1)+T2.f2/(T1.f3+T3.f2) 
end)
from T1, T2, T3

解决方案 »

  1.   

    先谢谢你的回答,基本上与我想的差不多!但还有一点,
    ps: select 后的T1.f1+T2.f1/(T2.f3-T3.f1)+T2.f2/(T1.f3+T3.f2)这部分表达式的内容是不确定的!有可能会有很多相关的计算!!
    也就是说有可能有很多需要判断的,也就是说我们是不能把case when后的语句写成固定的内容,这部分应该是动态的![:)]是不是有与除0有关的什么函数呀,SP呀,月光宝盒什么的是我不知道的?
      

  2.   

    --根据你的数据设一个无限大的数据如:99999999999,那么一个数据除以一个相对很大的数据,那么结果自然为0:
    select T1.f1+T2.f1/(case when (T2.f3-T3.f1)=0 then 99999999999 else T2.f3-T3.f1 end)+T2.f2/case when (T1.f3+T3.f2)=0 then 99999999999 else T1.f3+T3.f2 end) from T1, T2, T3
      

  3.   

    你自己的逻辑是什么?
    a/0 = a ?
    a/0 = 0 ?
    a/0 = ...?
      

  4.   

    偶的逻辑是 
      
      a/0= 0
      
      a/0+b = b:)
      

  5.   

    “与除零有关的函数”就是case了。因为case中then后边难道有什么非常固定的定式么?
      

  6.   

    使用 ISNULL與NULLIF函數可解決此問題:
       ISNULL(分子/NULLIF(分母,0),0)  --當分母為0時NULLIF將分母變為NULL,NULL值參與任何運算結果為NULL,再經過ISNULL函數整個結果為0,具體應用請自己寫。
      

  7.   

    select (case when 分母=0 then 0 else 分子/分母 end) from ...或
    select 分子/分母  from ... where 分母<>0
    union all
    select 0 from ... where 分母=0