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
(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
ps: select 后的T1.f1+T2.f1/(T2.f3-T3.f1)+T2.f2/(T1.f3+T3.f2)这部分表达式的内容是不确定的!有可能会有很多相关的计算!!
也就是说有可能有很多需要判断的,也就是说我们是不能把case when后的语句写成固定的内容,这部分应该是动态的![:)]是不是有与除0有关的什么函数呀,SP呀,月光宝盒什么的是我不知道的?
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
a/0 = a ?
a/0 = 0 ?
a/0 = ...?
a/0= 0
a/0+b = b:)
ISNULL(分子/NULLIF(分母,0),0) --當分母為0時NULLIF將分母變為NULL,NULL值參與任何運算結果為NULL,再經過ISNULL函數整個結果為0,具體應用請自己寫。
select 分子/分母 from ... where 分母<>0
union all
select 0 from ... where 分母=0