我编写了一个VBA函数,可以动态构建INSERT INTO
查询。此查询基于从另一个表
例如公式"[Cash]/[Sales]"
会产生如下查询:
INSERT INTO tblKPIScores
SELECT Employee, [Cash]/[Sales] as Score
FROM tblBasedata
为了避免div / 0错误,我尝试编写另一个函数,该函数能够计算公式的哪一部分(如果有的话)包含除数,然后单独在SQL查询中测试它,例如。
INSERT INTO tblKPIScores
SELECT Employee, IIF([Sales] = 0,0,[Cash]/[Sales]) as Score
FROM tblBasedata
然而,有些公式非常复杂,有很多括号,可能包含几个除数,所以我无法编写一个可以可靠地返回任何给定公式的除数的UDF。
我现在正在尝试这样的事情:
INSERT INTO tblKPIScores
SELECT Employee, IIF(ISERROR(tScore),0,tScore) AS Score
FROM
(SELECT Employee, [Cash]/[Sales] as tScore
FROM tblBasedata)
但不是输入零,这仍然是#Num!错误,因为我认为它正在评估IIF函数的两个部分,如果true或false部分评估为错误,则返回错误。
所以我的问题是,有没有办法处理#Num! SQL在运行时出错还是有更好的方法来解决这个问题?
答案 0 :(得分:0)
为什么不定义一个Function来处理除法并在SQL中调用它?通过使用Variant数据类型,您还可以检查Null值。根据需要更改它们。
Public Function SqlCalculation(ByVal value1 As Variant, ByVal value2 As Variant) As Double
If value2 = 0 Then SqlCalculation = 0 Else SqlCalculation = value1 / value2
End Function
在SQL中调用它:
INSERT INTO tblKPIScores (...)
SELECT Employee, SqlCalculation([Cash],[Sales]) as Score
FROM tblBasedata